GoLangStudy:day11
GO day11
golang语法基础(channel part2,GOPATH弊端)
1.channel与range
package main
import (
"fmt"
)
func main() {
//创建一个无缓存channel
c := make(chan int)
go func() {
for i := 0; i < 5; i++ {
c <- i
}
//close是go的内嵌函数,可以关闭一个通道
close(c)
}()
//可以使用range来迭代不断操作channel
for data := range c {
fmt.Println(data)
}
fmt.Println("main 结束")
}
输出结果:
0
1
2
3
4
main 结束
range可以对channel进行操作,并且可以自动判断channel是否关闭,从而避免死锁
2.channel与select语句(监控多协程)
package main
import "fmt"
func fibonacci(c, quit chan int) {
a := 1
b := 1
for {
//select同时监控两个协程
select {
//如果c可写入,则执行对应case语句
case c <- a:
a = b
b = a + b
//如果quit可读取,则执行对应case语句
case <-quit:
fmt.Println("quit")
return
}
}
}
//主协程
func main() {
c := make(chan int)
quit := make(chan int)
//子协程
go func() {
for i := 0; i < 6; i++ {
fmt.Println(<-c)
}
quit <- 0
}()
fibonacci(c, quit)
}
输出结果:
1
1
2
4
8
16
quit
select关键字可以同时监控多个协程并根据不通条件来对不同协程做出反应
3.GOPATH工作模式弊端
在go modules出现之前,我们所有go项目都是存放在GOPATH路径下面

都是字面意思非常好理解啊(
浙公网安备 33010602011771号