zoukankan      html  css  js  c++  java
  • 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





  • 相关阅读:
    GUI编程
    网络编程
    线程池详解_3
    多线程详解_2
    注解和反射_1
    多线程详解_1
    javaEE简要总结
    MarkDown使用教程简单介绍
    com.sun.xxx.utils不存在问题的解决
    解决npm install安装慢的问题
  • 原文地址:https://www.cnblogs.com/hualou/p/12069688.html
Copyright © 2011-2022 走看看