Go语言后端开发笔记|青训营笔记

51 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第2天 一、本堂课重点内容:GO语言进阶与依赖管理 二、关于本堂课的知识点

  1. 本章内容首先向我们介绍了Go语言运行为何能够如此之快 从多线程程序运行的角度来看,其实并发指的是多线程在一个CPU上的运算,它主要是通过替换来实现同时运行的一个状态。而并行则是直接利用多核实现多线程的同时运行。广义的并发其实可以理解成是系统对外的一个特征或者能力,比如大家出去面试,都会说自己参加某某某个高并发的一个项目,这里的并发就是广义的。在实际中并行其实可以理解成实现并发的一个手段,而go语言的优点是实现了变化性能极高的一个调度模型,然后通过高效的调度,可以最大限度的利用计算资源,充分发挥多核计算机的一个优势,可以说Go语言就是为并发而生的。 2、Go语言中有协程 协程:用户态,轻量级现成,栈MB级别。 线程:内核态,线程跑多个协程,栈KB级别。 Go语言开启协程示例:
  2. package main
  3.  
  4. import (
  5. "fmt"
  6. "sync"
  7. )
  8.  
  9. var wg sync.WaitGroup
  10.  
  11. func Hello(i int) {
  12. defer wg.Done() // 减少WaitGroup计数器的值,应在线程的最后执行。
  13. fmt.Println("Hello Goroutine!", i)
  14. }
  15.  
  16. func main() {
  17. for i := 0; i < 10; i++ {
  18. wg.Add(1) // 向协程计数器加1。
  19. go Hello(i)
  20. }
  21. wg.Wait() // 阻塞协程,直到协程计数器为0。
  22. fmt.Println("所有的协程已经结束了,主线程可以结束了。")
  23. }

3、Go语言协程中的Channel 例如A子协程发送0-9数字 B子协程计算输入数字的平方 主协程输出最后的平方数 Go创造Channel

func goRoutineA(a <-chan int) { val := <-a fmt.Println("goRoutineA received the data", val) } func main() { ch := make(chan int) go goRoutineA(ch) time.Sleep(time.Second * 1) }