package main
import (
"fmt"
"time"
)
// 子goroutine,主goroutine结束,子也结束
func NewTask() {
i := 0
for {
i++
fmt.Println("new Goroutine: i =", i)
time.Sleep(1 * time.Second)
}
}
func main() {
//定义一个无缓冲的channel
c := make(chan int)
go func() {
defer fmt.Println("go goroutine 结束")
fmt.Println("go goroutine 正在进行....")
c <- 66 // 将66写的chan中
}()
// 从channel中读取数据,复制给num
num := <-c
fmt.Println("num is ", num)
}
// 结果:
go goroutine 正在进行....
go goroutine 结束
num is 66
注意:
不会,当main从chan中拿不到数据,会阻塞等待
不会,因为是无缓冲channel,子sub go会阻塞等待main 获取数据
package main
import (
"fmt"
"time"
)
// 子goroutine,主goroutine结束,子也结束
func NewTask() {
i := 0
for {
i++
fmt.Println("new Goroutine: i =", i)
time.Sleep(1 * time.Second)
}
}
func main() {
//定义一个有缓冲的channel
c := make(chan int, 3)
fmt.Println("c的length =", len(c), "c的cap =", cap(c))
go func() {
defer fmt.Println("go goroutine 结束")
for i := 0; i < 4; i++ {
c <- i // 将i写的chan中
fmt.Println("go goroutine 正在进行....,发送的元素:", i, "length =", len(c), "cap = ", cap(c))
}
}()
time.Sleep(3 * time.Second)
// 从channel中读取数据,复制给num
for i := 0; i < 3; i++ {
num := <-c
fmt.Println("num is ", num)
}
fmt.Println("main 结束 ")
}
// 结果:
go goroutine 正在进行....,发送的元素: 0 length = 1 cap = 3
go goroutine 正在进行....,发送的元素: 1 length = 2 cap = 3
go goroutine 正在进行....,发送的元素: 2 length = 3 cap = 3
num is 0
num is 1
num is 2
main 结束
go goroutine 正在进行....,发送的元素: 3 length = 3 cap = 3
go goroutine 结束
注意:
for data := range c {
fmt.Println(data)
}
package main
import (
"fmt"
)
func feibonicii(c, quit chan int) {
x, y := 1, 1
for {
select {
case c <- x: //如果c可写,将x写入c中
x = y
y = x + y
case <-quit: // 如果quit可读,则sub go已执行完任务
fmt.Println("quit....")
return
}
}
}
func main() {
c := make(chan int)
quit := make(chan int)
// sub go
go func() {
for i := 0; i < 16; i++ {
fmt.Println(<-c)
}
quit <- 0
}()
// main go
feibonicii(c, quit)
}
[例3.19] 查全体学生的姓名及其出生年份。 select Sname , 2021 - Sage from stu...
IT之家3月18日消息 据微软博客发布,微软今天推送了 Windows 10 Dev 预览版 Buil...
今天工作时,有个临时加的好友问我,怎么利用web页面获取访问者的qq。 以前没有...
1. .* . 表示匹配除换行符 \n 之外的任何单字符, * 表示零次或多次。所以 .* 在...
事例: php版本为7.2 phpecho memory_get_usage() , 'br';$start = memory_get_u...
IT之家12月25日消息据外媒 WinCentral 称,微软 Edge 浏览器 88 稳定版更新将于 ...
你手里有一块硬盘,大小为 1T 你还有一堆文件 这些文件在硬盘看来,就是一堆二进...
今天给大家分享四个在实际开发中,比较实用的SQL Server脚本函数,希望对大家能...
webapi接口在ajax调用的很多情况下都会出现跨域问题,同样的WebService如果想用a...
什么是多租户 网上有好多解释,有些上升到了架构设计,让你觉得似乎非常高深莫测...