goprocess.go
func GoChild(parent Process, f ProcessFunc) Process {
	p := WithParent(parent)
	p.Go(f)
	return p
}
func GoChild(parent Process, f ProcessFunc) Process {
	p := WithParent(parent)
	p.Go(f)
	return p
}
func GoChild ( parent Process , f ProcessFunc ) Process { p := WithParent ( parent ) p . Go ( f ) return p }
// GoChild is like Go, but it registers the returned Process as a child of parent,
// **before** spawning the goroutine, which ensures proper synchronization with parent.
// It is somewhat like
//
//   func GoChild(parent Process, f ProcessFunc) Process {
//     p := WithParent(parent)
//     p.Go(f)
//     return p
//   }
//
// And it is similar to the classic WaitGroup use case:
//
//   func WaitGroupGo(wg sync.WaitGroup, child func()) {
//     wg.Add(1)
//     go func() {
//       child()
//       wg.Done()
//     }()
//   }
//
GoChild is like Go but it registers the returned Process as a child of parent ** before ** spawning the goroutine which ensures proper synchronization with parent . It is somewhat like func GoChild ( parent Process f ProcessFunc ) Process { p : = WithParent ( parent ) p . Go ( f ) return p } And it is similar to the classic WaitGroup use case : func WaitGroupGo ( wg sync . WaitGroup child func () ) { wg . Add ( 1 ) go func () { child () wg . Done () } () }