• go语言的坑


    go语言在for循环中遍历的临时变量地址是一样的

    func main() {
        //SetLogConfToEtcd()
        for i := 0; i < 5; i++ {
            a := i
            fmt.Printf("%p
    ", &i)  //可以看到i的地址都是一样的,也就是说i是复用的
            fmt.Printf("%p
    ", &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)
    }
    

    image-20191216191204343





  • 相关阅读:
    hph 缓存机制
    递归调用 和 迭代
    多维数组排序
    php curl操作
    JavaScript基本数据类型
    JavaScript基础
    CSS基础布局
    CSS基础样式
    CSS选择器
    CSS3基础
  • 原文地址:https://www.cnblogs.com/hualou/p/12069688.html
Copyright © 2020-2023  润新知