趁着最近有点时间,尽量抽点时间学习一下后端方面的知识。也不让自己懒得,今年得把golang 好好学一下。
今晚看到chan,通道,和goroutine,单词也有点不会拼写。第一次看的时候,不知道什么,只知道是协程,比起线程还要写。知道golang提及到并发编程,会用到这两个知识点。
chan 的声明
map 和chan 均使用make来创建。如下面 var ma = make(map[string] int)
var ch = make(chan int) //创建一个阻塞的通道,为整形
var ch = make(chan string) //创建一个阻塞的通道,为字符串
通道还可以带上缓冲区
var ch = make(chan int,2) //创建一个阻塞的通道,为整形
var ch = make(chan string,2) //创建一个阻塞的通道,为字符串
这里有点像事件那样定义一个广播者,可读可写
ch = <- 1 //写入
<-ch //读取
上面定义的通道有两种操作可读可写。
chan 的小练习
记录一下通道和go练习
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
fmt.Println("学习通道")
var driver = make(chan int) //创建一个不带缓冲阻塞的通道
go func() {
fmt.Println("正在执行计算")
time.AfterFunc(5*time.Second, func() {
fmt.Println("执行了")
driver <- 1
})
}()
v := <-driver //这里会阻塞,等到5秒后会输出对应的值
fmt.Println("收到值" + strconv.Itoa(v))
}