初级会员
  • 第 29899 位会员
  • chenjiandongx
  • 2019-02-11 02:20:54
  • Offline
  • 20 75

最近发布的项目

    暂无

最近的评论

  • 评论了博文 有趣的defer
    个人的一点见解 ```go package main import "fmt" func main() { message := "消息1" defer func() { fmt.Println("第一个defer:", message) }() message = "消息改变了" defer func(m string) { fmt.Println("第二个defer:", m) message = "消息又改变了" }(message) message = "消息2" } ``` 在上面的中,这部分应该是一个 `代码块` ```go message = "消息改变了" defer func(m string) { fmt.Println("第二个defer:", m) message = "消息又改变了" }(message) ``` 也就是说你在声明 defer 函数的时候,参数已经被**复制**并传入到函数中,这时候 message 已经是确定的,它已经不是你全局持有的 message 变量了。 怎么验证呢,你可以传递字符串指针进去。 ```go func main() { message := new(string) *message = "消息改变了" defer func(m *string) { fmt.Println("第二个defer:", *m) }(message) *message = "消息2" } ``` 因为指针只是保留的引用,存储着字符串的内存地址,所以它的状态会是一致的。代码会输出 ```shell 第二个defer: 消息2 ```
  • 评论了博文 go-echarts 开源啦
    觉得不错的同学可以给项目一个 Star 表示鼓励哈