首页 > 编程语言 > 详细

go语言的坑

时间:2019-12-19 20:49:07      阅读:74      评论:0      收藏:0      [点我收藏+]

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)
}

技术分享图片





go语言的坑

原文:https://www.cnblogs.com/hualou/p/12069688.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!