LingKang的go学习日记-2 routine&&channel

协程定义&&理解: (历史背景,底层逻辑,理解)

goRoutine

channel定义&&理解:

当遇到开启协程取channel,使用for select读取,还是for-range读取:

for-select需要注意routine关闭,否则造成内存泄漏,除非main接触,否则协程方法/实例方法没有办法被gc回收

for-range只需要保证channel被关闭,即可退出,不会造成routine不退出导致的内存泄露

func main() {
	sta := state{
		ch:                  make(chan int),
	}
	wg := sync.WaitGroup{}
	wg.Add(1)
	sta.run(&wg)
	sta.ch <- 1
	close(sta.ch)
	wg.Wait()

}

type state struct {
	ch                  chan int
}

func (s *state) run(wg *sync.WaitGroup) {
	go func() {
		for range s.ch {
			y := 1
			fmt.Println(y)
			time.Sleep(1 * time.Second)

		}
		fmt.Println("done")
		wg.Done()
	}()
}

in process...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值