flora222

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路径下面

屏幕截图 2026-07-18 233626

都是字面意思非常好理解啊(

posted on 2026-07-18 23:40  Flora2  阅读(5)  评论(0)    收藏  举报

导航