美文网首页
19年第35周:Go语言 不易懂的特殊标识符 如defer

19年第35周:Go语言 不易懂的特殊标识符 如defer

作者: 习惯研究所所长 | 来源:发表于2019-08-25 09:52 被阅读0次

一、前言

写这个,是为了在之后的工作学习中,更好的应用和更好的理解。
许多时候,学和用是有一定的时间差,因此,好记忆不如烂笔头。
而且,随着自己的使用越来越多,理解也会越来越深刻。
不知道是谁曾说的“记住它在哪里使用过(我好像在哪里见过你)”。这句话的意思是,传递指针,比传递值能够减缓秃头的趋势。


二、难点目录(持续更新)

1. defer关键字 参考《Go语言程序设计》5.8 延迟函数的调用


1. defer关键字

defer的理解:

  • ①语义理解:中文翻译为 推迟 延期 延迟
  • ②语法类比:相当于其他语言的 try.....finally...
  • ③基本原理:当做一个FILO(先进后出)语法/代码栈
  • ④使用场景:成对的操作, 如 打开/关闭,连接/断开,加锁/解锁。调试复杂的函数
  • ⑤实际案例:
package main

import(
    "fmt"
)
func myDefer() (r int) {
    r = 1
    j := 1
    defer func(x int) {
        x++ // 函数参数 x 在定义时确定
        fmt.Printf("x is %v \n", x) // equal 2
        r++ // 外部变量 r 在运行时定义
        fmt.Printf("r is %v \n", r) // equal 3
    }(j)
    j = 2
    r = 2
    return // 将返回3
}

func main(){
    fmt.Printf("myDefer() = %v ", myDefer())
}
package main

import(
    "fmt"
    "sync"
)


var mutex sync.Mutex
var wg sync.WaitGroup
var count = 0

func main(){
    N := 10
    for i:=0;i<N;i++{
        wg.Add(1)
        go increment()
    }
    wg.Wait() // 我等你们加完
    fmt.Printf("count = %d, N = %d \n", count, N)  // equal N

}

func increment() {
    defer wg.Done() // 这种写法好在,不用写着代码,写着写着就忘了后续操作
    
    mutex.Lock()
    defer mutex.Unlock()
    
    count++
    //wg.Done()
}

相关文章

  • 19年第35周:Go语言 不易懂的特殊标识符 如defer

    一、前言 写这个,是为了在之后的工作学习中,更好的应用和更好的理解。许多时候,学和用是有一定的时间差,因此,好记忆...

  • 二. go的基础知识

    所有go源码以.go结尾 标识符以字母或下划线开头,大小写敏感,(_是特殊标识符,还可用来忽略结果)Go语言中的函...

  • Go var

    Go语言基础语法,Go在很多特性上和C非常相近。 标识符 编程语言中标识符实际上是程序员定义的具有特殊意义的名称,...

  • Dart(1)变量和常量

    标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字...

  • Golang学习笔记-defer关键字学习

    defer学习 很多现代的变成语言中都会有defer关键字,Go语言的defer会在当前函数或是方法返回之前执行传...

  • Go语言学习进度(7)

    1.GO语言关键字Interface 举例说明: 2.GO语言关键字defer

  • Go语言 defer

    参考文章:深入理解Go语言 defer用于资源的释放,会在函数返回之前进行调用 defer关键字的实现跟go关键字...

  • Go语言——defer

    Go语言——defer defer操作类似stack,FILO先进后出。 与return一直使用的时候,需要注意顺...

  • go语言——defer

    defer

  • golang语言defer特性详解.md

    [TOC] golang语言defer特性详解 defer语句是go语言提供的一种用于注册延迟调用的机制,它可以让...

网友评论

      本文标题:19年第35周:Go语言 不易懂的特殊标识符 如defer

      本文链接:https://www.haomeiwen.com/subject/svchectx.html