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语言零碎笔记

R语言学习笔记(十八):零碎知识点46-50

Shell脚本笔记一些零碎的基础知识

GO学习笔记 - 变量在定义时没有明确的初始化时会赋值为“零值 ”。

45. sync.Mutex 互斥和互斥锁 | 厚土Go学习笔记

Go语言开发Go语言并发编程