image.pngimage.png
image.png
image.pngimage.pngimage.pngimage.png

channel实战

_package _main

import “fmt”
_func _main(){

// 初始化channel // channel在使用之前,必须进行make进行初始化 // 否则,它会是一个nil ch := make(_chan _int)

// 注意:go语言中无缓冲的channel是必须要同时具备输入输出,所以不能直接 // ch <- 1 和 <-ch // 输入channel go func(){

  1. ch <- 1

}()

// 输出channel fmt.Println(<-ch)

// 关闭 close(ch)

}

案例实操

image.png

代码示例

_package _main

import (
“sync” “fmt”)

func _main() {
// 初始化eggs _
eggs := make(_chan _int, 10)

// 输入10个鸡蛋
for _i := 0; i < 10; i++ {
eggs <- i
}
_var _wg sync.WaitGroup
for i := 0; i < 100; i++ {
wg.Add(1)
_go func
(num int) {
select {
case _egg := <-eggs:
fmt.Printf(“People : %d, Get egg : %d\n”, num, egg)
_default
:
fmt.Println(“failed….”)
}
wg.Done()
}(i)
}
wg.Wait()
}

channel实现资源争抢

image.pngimage.png