Skip to content

Commit d22676f

Browse files
committed
lesson15
1 parent e1ec68c commit d22676f

File tree

1 file changed

+147
-0
lines changed

1 file changed

+147
-0
lines changed

lesson15/main.go

+147
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
func main() {
8+
/*
9+
通道的声明 chan 就是channel的缩写
10+
var channel_name chan channel_type
11+
*/
12+
13+
//var ch chan string
14+
//
15+
//ch = make(chan string)
16+
17+
//ch := make(chan string)
18+
19+
/*
20+
发送数据
21+
channel_name <- data
22+
23+
接收数据
24+
value := <-channel_name
25+
*/
26+
27+
//创建一个通道
28+
//ch := make(chan string)
29+
////打印 学习课程:
30+
//fmt.Println("学习课程:")
31+
////开启协程
32+
//go PrintChan(ch)
33+
////从通道中接收数据
34+
//rec := <-ch
35+
////打印从通道接收的数据
36+
//fmt.Println(rec)
37+
////打印 学习目标:全面掌握Go语言微服务落地,代码级一次性解决微服务和分布式系统。
38+
//fmt.Println("学习目标:全面掌握Go语言微服务落地,代码级一次性解决微服务和分布式系统。")
39+
40+
//time.Sleep()
41+
42+
//关闭通道
43+
//close(channel_name)
44+
//value, ok := <-channel_name
45+
46+
//c := make(chan int, 3)
47+
//fmt.Println("初始化后:")
48+
//fmt.Println("cap=", cap(c))
49+
//fmt.Println("len=", len(c))
50+
//c <- 1
51+
//c <- 2
52+
//fmt.Println("传入2个参数后:")
53+
//fmt.Println("cap=", cap(c))
54+
//fmt.Println("len=", len(c))
55+
//<-c
56+
//fmt.Println("读取一个数据后:")
57+
//fmt.Println("cap=", cap(c))
58+
//fmt.Println("len=", len(c))
59+
60+
/*
61+
无缓冲通道
62+
c:=make(chan int)
63+
c:=make(chan int,0)
64+
65+
缓冲通道
66+
c:=make(chan int,3)
67+
*/
68+
69+
//c := make(chan int)
70+
//go func() {
71+
// fmt.Println("send 1")
72+
// c <- 1
73+
//}()
74+
//
75+
//go func() {
76+
// n := <-c
77+
// fmt.Println("receive:", n)
78+
//}()
79+
//
80+
//time.Sleep(1 * time.Second)
81+
82+
/*
83+
只读通道 <-chan
84+
只写通道 chan <-
85+
*/
86+
87+
//创建一个双向通道
88+
//
89+
90+
//遍历通道 for range
91+
//var ch2 = make(chan int, 5)
92+
//go loopPrint(ch2)
93+
//for v := range ch2 {
94+
// fmt.Println(v)
95+
//}
96+
//
97+
//ch3 := make(chan bool, 1)
98+
//var x int
99+
//for i := 0; i < 10000; i++ {
100+
// go increment(ch3, &x)
101+
//}
102+
//time.Sleep(time.Second)
103+
//fmt.Println("x=", x)
104+
105+
//ch := make(chan bool)
106+
//ch <- true //fatal error: all goroutines are asleep - deadlock!
107+
108+
//ch := make(chan bool)
109+
//go funcReceiver(ch)
110+
//ch <- true
111+
////fmt.Println(<-ch) //fatal error: all goroutines are asleep - deadlock!
112+
//time.Sleep(time.Second)
113+
114+
//ch5 := make(chan bool, 1)
115+
//ch5 <- true
116+
//fmt.Println(<-ch5)
117+
118+
ch6 := make(chan bool, 1)
119+
ch6 <- true
120+
ch6 <- false
121+
fmt.Println(<-ch6) //fatal error: all goroutines are asleep - deadlock!
122+
123+
}
124+
125+
func funcReceiver(c chan bool) {
126+
fmt.Println(<-c)
127+
}
128+
129+
func increment(ch chan bool, x *int) {
130+
ch <- true
131+
*x = *x + 1 //不是原子操作,避免多协程进行操作,使用容量为1的通道,达到锁的效果
132+
<-ch
133+
}
134+
135+
func loopPrint(c chan int) {
136+
for i := 0; i < 10; i++ {
137+
c <- i
138+
}
139+
close(c)
140+
}
141+
142+
type Sender = chan<- string
143+
type Receiver = <-chan string
144+
145+
func PrintChan(c chan string) {
146+
c <- "从0到Go语言微服务架构师"
147+
}

0 commit comments

Comments
 (0)