go defer 延迟语句
即时求值的变量快照
使用 defer 只是延时调用函数,此时传递给函数里的变量,不应该受到后续程序的影响。
比如这边的例子
import "fmt"
func main() {
    name := "go"
    defer fmt.Println(name) // 输出: go
    name = "python"
    fmt.Println(name)      // 输出: python
}
如果 defer 后面跟的是匿名函数,情况会有所不同, defer 会取到最后的变量值
package main
import "fmt"
func main() {
    name := "go"
    defer func(){
    fmt.Println(name) // 输出: python
}()
    name = "python"
    fmt.Println(name)      // 输出: python
}
多个defer 反序调用
多个defer 是反序调用的,有点类似栈一样,后进先出
defer 与 return 孰先孰后
import "fmt"
var name string = "go"
func myfunc() string {
    defer func() {
        name = "python"
    }()
    fmt.Printf("myfunc 函数里的name:%s\n", name)
    return name
}
func main() {
    myname := myfunc()
    fmt.Printf("main 函数里的name: %s\n", name)
    fmt.Println("main 函数里的myname: ", myname)
}
输出如下
myfunc 函数里的name:go
main 函数里的name: python
main 函数里的myname:  go
那就是 defer 是return 后才调用的。所以在执行 defer 前,myname 已经被赋值成 go 了。
    http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!!
但行好事 莫问前程
--身高体重180的胖子
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号