Go 语言上手 - 工程实践 | 青训营笔记

121 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

01并发 VS 并行

Snipaste_2022-05-08_18-54-27.png 并发是通过时间片的切换实现多线程。 并行是通过多核CPU的实现并行。

1.1Goroutine

Snipaste_2022-05-08_18-57-46.png 线程属于内核态,切换需要占用的资源大 协程属于用户态,更加轻量级 使用go+函数创建一个协程

1.2CSP

Snipaste_2022-05-08_19-31-28.png

1.3Channel

Snipaste_2022-05-08_19-33-54.png 无缓冲通道就是同步通道

package main

func main() {
	src := make(chan int)
	dest := make(chan int, 3)
	go func() {
		defer close(src)
		for i := 0; i < 10; i++ {
			src <- i
		}
	}()
	go func() {
		for i := range src {
			dest <- i * i
		}
	}()
	for i := range dest {
		println(i)
	}
}

通过chan实现通信

1.4 并发安全

Snipaste_2022-05-08_19-44-02.png 避免对共享内存的非并发安全的操作

1.5WairGroup

Snipaste_2022-05-08_19-46-19.png 实例:

Snipaste_2022-05-08_19-47-32.png

02依赖管理

2.1Go依赖管理演进

Snipaste_2022-05-08_19-50-28.png

2.1.1 GOPATH

Snipaste_2022-05-08_19-51-26.png 存在弊端,无法实现多个版本控制

Snipaste_2022-05-08_19-52-17.png

2.1.2Go Vender

Snipaste_2022-05-08_19-52-46.png 存在弊端:无法控制以来的版本

Snipaste_2022-05-08_19-53-45.png

2.1.3Go Moule

Snipaste_2022-05-08_19-54-01.png

2.2依赖管理三要素(类比java中的maven)

Snipaste_2022-05-08_19-54-40.png

2.3.1 依赖配置 go.mod

Snipaste_2022-05-08_19-56-10.png require描述单元依赖

2.3.2 依赖配置

Snipaste_2022-05-08_19-56-50.png

2.3.3依赖配置 indirect

Snipaste_2022-05-08_19-58-14.png

2.3.4依赖配置 incompatiable

Snipaste_2022-05-08_19-59-23.png