How To Efficiently Utilize Waitgroup And Channels In Go For Concurrency