go多线程
1、简单使用(这个执行完成,如果进程执行比较久,这里不会等待它们结束)
package main
import "time"
func main() {
go func() {
println("Hello, World!")
}()
time.Sleep(1 * time.Second)
}
2、wg.Add(数量)使用,这个会等待,直到全部完成
func main() {
wg := sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Add(1)
go calc(&wg, i)
}
wg.Wait()
fmt.Println("all goroutine finish")
}
func calc(w *sync.WaitGroup, i int) {
fmt.Println("calc:", i)
time.Sleep(time.Second)
w.Done()
}
传值localI := i,不能直接使用i,会重复,因为你在下次使用可能i已改变
var wg sync.WaitGroup
numGoroutines := 100
wg.Add(numGoroutines) //100个
for i := 0; i < numGoroutines; i++ {
localI := i
go func() {
fmt.Println("Value:", localI)
fmt.Println("大得")
wg.Done() //减1,直到全部减完,结束
}()
}
wg.Wait()
fmt.Println("执行完了")