Gotoutine(协程)
协程:用户态,轻量级线程,栈KB级别
线程:内核态,线程跑多个协程,栈MB级别
现在看代码
package main
import (
"fmt"
"time"
)
func hello(i int) {
println("hello ==>" + fmt.Sprint(i)) //sprintf指的是字符串格式化命令
}
func HelloRun() {
for i := 0; i < 5; i++ {
go func(j int) { //开启一个协程
hello(j)
}(i)
}
time.Sleep(time.Second)
}
func main() {
HelloRun()
}
CSP(通信顺序进程)
在Go中是以通讯共享内存的而不是以共享内存而实现通信,这里图片可以一目了然。
所以接下来也引出Channel
Channel(通道/管道)
创建一个Channel
make(chan 元素类型,[缓冲大小])
1.无缓冲通道 make(chat int)
2.有缓冲通道 make(chat int,2)
咱们的话引出代码
这里我没写两个协程,做了个单协程做为理解
package main
func CalSquare() {
src := make(chan int)
//dest := make(chan int, 3)
go func() {
defer close(src) //延迟关闭
for i := 0; i < 10; i++ {
src <- i // <- 往这个通道中传输值
}
}()
//go func() {
// defer close(dest)
// for i := range src {
// dest <- i
// }
//}()
for i := range src { //range遍历
println(i)
}
}
func main() {
CalSquare()
}
无缓冲与缓冲管道的区别:blog.csdn.net/yanghaitao5…
这个对于无缓冲及有缓冲管道的区别十分的详细!!!
并发安全 Lock
并发安全就是在处理多个数据的时候并发处理的一个安全问题。如果没有加锁的情况下,会导致其有些数据丢失。对于这个知识的话,可以对应课程敲一遍,可以一目了然的。
Go Module
- 通过
go.mod文件管理依赖包版本 - 通过
go get/go mod指令工具管理依赖包
依赖三要素:
配置文件,描述依赖 go.mod
中心仓库管理依赖库 Proxy
本地工具 go get/mod
依赖配置 go.mod
这个依赖配置就相当于java中Maven
Proxy
这个其实就是一个加载源,在Github的拷贝项目,而加载的时候。会发现依赖包都加载不动。所以我们的换源
最简单的方法(IDEA):
1.打开设置
2.换源
3.源
阿里云的源
GOPROXY=mirrors.aliyun.com/goproxy/
使用其他工具
访问官网,参考官网教程设置: goproxy.io/
或使用阿里云的镜像: mirrors.aliyun.com/goproxy/
go mod
init 初始化,创建go.mod文件
download 下载模块到本地缓存
tidy 增加需要的依赖,删除不需要的依赖