go语言在for循环中遍历的临时变量地址是一样的
func main() {
//SetLogConfToEtcd()
for i := 0; i < 5; i++ {
a := i
fmt.Printf("%p\n", &i) //可以看到i的地址都是一样的,也就是说i是复用的
fmt.Printf("%p\n", &a) //如果需要将遍历的变量地址赋值传给别的变量,可以在循环中声明一个新的临时变量来接受
}
}
0xc0000ce7e8
0xc0000ce7f0
0xc0000ce7e8
0xc0000f2008
0xc0000ce7e8
0xc0000f2010
0xc0000ce7e8
0xc0000f2018
0xc0000ce7e8
0xc0000f2020
go语言中 go协程生成的子协程并不会随着父协程的的退出而结束,只要main不退出,所以在协程中return之前,先想办法把子协程关了
package main
import (
"fmt"
"os"
"os/signal"
"time"
)
func main() {
go func() {
go func() {
time.Sleep(10 * time.Second)
fmt.Println("当前子携程退出")
}()
fmt.Println("当前携程退出")
return
}()
ch := make(chan os.Signal)
signal.Notify(ch)
fmt.Println(<-ch)
}