第二日后端青训营 | 青训营笔记

65 阅读2分钟
这是我参与「第五届青训营」伴学笔记创作活动的第2天

这节课的重点主要是关于并发编程和项目实战,单元测试和依赖管理属于了解内容。

并发编程小记

go语言里的并发:Go 语言的并发通过 goroutine 特性完成。goroutine 类似于线程,但是可以根据需要创建多个 goroutine 并发工作。

Go 语言还提供 channel 在多个 goroutine 间进行通信 goroutine 是一种非常轻量级的实现,可在单个进程里执行成千上万的并发任务,它是Go语言并发设计的核心。

构建goroutine示例:

package main import ( "fmt" "time" ) //函数定义:构建一个无限循环打印 func running() { var times int // 构建一个无限循环 for { times++ fmt.Println("tick", times) // 延时1秒 time.Sleep(time.Second) } } func main() { // 使用go关键字,开启一个协程,并发执行程序 go running() // 接受命令行输入, 不做任何事情 var input string fmt.Scanln(&input) //这里会等待用户输入,当用户输入后,main函数执行结束 //所有 goroutine 在 main() 函数结束时会一同结束。 }

Go语言提供的消息通信机制被称为 channel。 通道的特性: Go语言中的通道(channel)是一种特殊的类型。在任何时候同时只能有一个 goroutine 访问通道进行发送和获取数据 通道其实是一个消息队列,总是遵循先入先出(First In First Out)的规则,保证收发数据的顺序。不同的goroutine从里面放数据和取数据。

创建通道的示例: ch1 := make(chan int) // 创建一个整型类型的通道 ch2 := make(chan interface{}) // 创建一个空接口类型的通道, 可以存放任意格式 type Equip struct{ /* 一些字段 */ } ch2 := make(chan *Equip) // 创建Equip指针类型的通道, 可以存放*Equip

课后总结

本节课主要对go语言的并发编程进行了学习与项目实践,但是任然了解得比较粗浅,需要课后继续学习。