You will need a barrier, the wait Group in your case, to guarantee the main goroutine will only continue after all the others have finished their work. Besides if any of your goroutines blocks due to IO the Go scheduler will look for another goroutine to run while the blocked one waits.
Another thing is that you don't know which goroutine will run, you cannot force the Go scheduler to run one goroutine and keep other waiting, for that you need to synchronize them.
I don't fully understand what is your problem, you solution is correct, having a barrier to avoid the main goroutine moving forward than it should.
Another thing,
Concurrency is not parallelism, goroutines will run concurrently, due to the multi-core processors we have, they will likely run in parallel, but this does not guarantees 2 gorounites started at the same time will run in parallel. I don't think you can force goroutines to run in parallel, you can synchronize to ensure the correct behaviour of your program.
Best,
Anderson