sync.Once.Do(f func())是一个挺有趣的东西,能保证once只执行一次,无论你是否更换once.Do(xx)这里的方法,这个sync.Once块只会执行一次. package main import ( "fmt" "sync" "time" ) var once sync.Once func main() { for i, v := range make([]string, 10) { once.Do(onces) fmt.P…
sync.Once.Do(f func()) 是一个非常有意思的东西,能保证 once 只执行一次,无论你是否更换 once.Do(xx) 这里的方法,这个 sync.Once块 只会执行一次. package main import ( "fmt" "sync" "time" ) var once sync.Once func main() { for i, v := range make([]string, 10) { once.Do(onc…
1. go协程(go routine) go原生支持并发:goroutine和channel. go协程是与其他函数或方法一起并发运行的函数和方法.go协程可以看作是轻量级线程. 调用函数或者方法时,在前面加上关键字go,可以让一个新的GO协程并发地运行. l 启动一个新的协程时,协程的调用会立即返回.与函数不同,程序控制不会去等待 Go 协程执行完毕.在调用 Go 协程之后,程序控制会立即返回到代码的下一行,忽略该协程的任何返回值. l 如果希望运行其他 Go 协程,Go 主协程必须继续运…