摆烂新人写笔记 Day02

74 阅读2分钟

Gotoutine(协程)

image.png

协程:用户态,轻量级线程,栈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(通信顺序进程)

image.png

在Go中是以通讯共享内存的而不是以共享内存而实现通信,这里图片可以一目了然。

所以接下来也引出Channel

Channel(通道/管道)

创建一个Channel

make(chan 元素类型,[缓冲大小])

1.无缓冲通道 make(chat int)

2.有缓冲通道 make(chat int,2)

image.png

咱们的话引出代码

这里我没写两个协程,做了个单协程做为理解

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

image.png

Proxy

这个其实就是一个加载源,在Github的拷贝项目,而加载的时候。会发现依赖包都加载不动。所以我们的换源

最简单的方法(IDEA):

1.打开设置

image.png

2.换源

image.png

3.源

阿里云的源

GOPROXY=mirrors.aliyun.com/goproxy/

使用其他工具

访问官网,参考官网教程设置: goproxy.io/

或使用阿里云的镜像: mirrors.aliyun.com/goproxy/

go mod

init 初始化,创建go.mod文件

download 下载模块到本地缓存

tidy 增加需要的依赖,删除不需要的依赖