go语言零碎笔记
Posted lishuangquan1987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言零碎笔记相关的知识,希望对你有一定的参考价值。
Channel
channel本着谁写入谁关闭的原则,消费者需要判断channel是否关闭
sync.Mutex
package main
import (
"fmt"
"sync"
)
func main()
fmt.Println("start")
var wg sync.WaitGroup
wg.Add(1)
go func()
defer wg.Done()
var mu sync.Mutex
test1(&mu)
()
wg.Wait()
fmt.Println("end")
func test1(mu *sync.Mutex)
defer mu.Unlock()
mu.Lock()
fmt.Println("test1")
test2(mu)
func test2(mu *sync.Mutex)
defer mu.Unlock()
mu.Lock()
fmt.Println("test2")
请问上面的代码会输出什么:
结论:go语言sync.Mutex在没有Unlock之前再次进入Lock会阻塞,即使是同一个线程
这点与C#有点不一样:
结论:同一个锁对象的前提下,C#语言同一个线程可以多次锁定,不同的线程同一时刻只能由一个线程锁定,其他线程调用Monitor.Enter(lockObj)
时会阻塞
自动更新所有包
go get -u
此命令会更新go.mod中的包到最新版本:
以上是关于go语言零碎笔记的主要内容,如果未能解决你的问题,请参考以下文章
GO学习笔记 - 变量在定义时没有明确的初始化时会赋值为“零值 ”。