File tree Expand file tree Collapse file tree 12 files changed +568
-523
lines changed
Expand file tree Collapse file tree 12 files changed +568
-523
lines changed Original file line number Diff line number Diff line change @@ -38,16 +38,16 @@ $ go get github.com/Tinywan/golang-tutorial
3838
3939#### 第6章 更多的类型
4040
41- ### [ 13 - Map] ( /docs/golang_tutorial_13.md )
42- ### [ 14 - 字符串] ( /docs/golang_tutorial_14.md )
41+ ###### [ 13 - Map] ( /docs/golang_tutorial_13.md )
42+ ###### [ 14 - 字符串] ( /docs/golang_tutorial_14.md )
4343
4444#### 第7章 指针、结构体和方法
4545
4646###### [ 15 - 指针] ( /docs/golang_tutorial_15.md )
4747###### [ 16 - 结构体] ( /docs/golang_tutorial_16.md )
4848###### [ 17 - 方法] ( /docs/golang_tutorial_17.md )
4949
50- ##### 第8章 接口
50+ #### 第8章 接口
5151
5252###### 18 - 接口一
5353###### 19 - 接口二
@@ -56,7 +56,7 @@ $ go get github.com/Tinywan/golang-tutorial
5656
5757###### 20 - 并发介绍
5858###### [ 21 - 协程] ( /docs/golang_tutorial_21.md )
59- ###### 22 - 管道
59+ ###### [ 22 - 信道 ] ( /docs/golang_tutorial_22.md )
6060###### 23 - 缓冲信道和工作池
6161###### 24 - Select
6262###### 25 - Mutex
Original file line number Diff line number Diff line change 1+ package main
2+
3+ func main () {
4+ m := make (chan int )
5+ m <- 5
6+ }
Original file line number Diff line number Diff line change @@ -5,17 +5,14 @@ import (
55)
66
77func main () {
8- var m map [string ]string
9- if m == nil {
10- fmt .Println ("this is nil map" )
8+ var c chan int // 信道 c 的值为 nil
9+ if c == nil {
10+ fmt .Println ("channel a is nil, going to define it" )
11+ c = make (chan int )
12+ fmt .Printf ("Type of c is %T" , c ) // 打印通道类型
1113 }
12- m = make (map [string ]string )
13- m ["name" ] = "Tinywan"
14- fmt .Println (m )
1514
16- m1 := map [string ]int {}
17- fmt .Println (m1 )
18- m1 ["age" ] = 24
19- m1 ["dateTime" ] = 20180909
20- fmt .Println (m1 )
15+ fmt .Printf ("\n " )
16+ a := make (chan int )
17+ fmt .Printf ("%T" , a ) // chan int
2118}
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "fmt"
5+ )
6+
7+ func hello (done chan bool ) {
8+ fmt .Println ("This is hello goroutines" )
9+ done <- true
10+ }
11+
12+ func getName (name chan string ) {
13+ fmt .Println ("This is getName goroutines" )
14+ name <- "Tinywan"
15+ }
16+
17+ func main () {
18+ done := make (chan bool )
19+ go hello (done )
20+ <- done
21+
22+ name := make (chan string )
23+ go getName (name )
24+ fmt .Println (<- name )
25+
26+ fmt .Println ("This is main function" )
27+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "fmt"
5+ )
6+
7+ func producer (num chan int ) {
8+ for i := 0 ; i < 10 ; i ++ {
9+ num <- i
10+ }
11+ close (num )
12+ }
13+
14+ func main () {
15+ ch := make (chan int )
16+ go producer (ch )
17+
18+ // for {
19+ // v, ok := <-ch
20+ // if ok == false { // 如果 ok 是 false 表示信道已经被关闭
21+ // break // 通过 break 退出循环
22+ // }
23+ // fmt.Println("Received", v, ok)
24+ // }
25+
26+ for v := range ch {
27+ fmt .Println ("Received " , v )
28+ }
29+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import ()
4+ import "fmt"
5+
6+ func sendData (d chan <- int ) {
7+ d <- 5
8+ }
9+
10+ func main () {
11+ d := make (chan <- int )
12+ go sendData (d )
13+ //fmt.Println(<-d) //试图从一个只写信道中接收数据
14+
15+ m := make (chan int ) // 将双向信道转换为只写或只读信道
16+ go sendData (m )
17+ fmt .Println (<- m )
18+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "fmt"
5+ "time"
6+ )
7+
8+ func hello (done chan bool ) {
9+ fmt .Println ("hello go routine is going to sleep" )
10+ time .Sleep (4 * time .Second )
11+ fmt .Println ("hello go routine awake and going to write to done" )
12+ done <- true
13+ }
14+
15+ func main () {
16+ done := make (chan bool )
17+ fmt .Println ("Main going to call hello go goroutine" )
18+ go hello (done )
19+ <- done
20+ fmt .Println ("Main received data" )
21+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "fmt"
5+ )
6+
7+ // 计算 number 每一位的平方和
8+ func calcSquares (number int , squareop chan int ) {
9+ sum := 0
10+ for number != 0 {
11+ digit := number % 10
12+ sum += digit * digit
13+ number /= 10
14+ }
15+ squareop <- sum // 将结果发送给信道 squareop
16+ }
17+
18+ func calcCubes (number int , cubeop chan int ) {
19+ sum := 0
20+ for number != 0 {
21+ digit := number % 10
22+ sum += digit * digit * digit
23+ number /= 10
24+ }
25+ cubeop <- sum
26+ }
27+
28+ func main () {
29+ number := 598
30+ squareop := make (chan int )
31+ cubeop := make (chan int )
32+ go calcSquares (number , squareop )
33+ go calcCubes (number , cubeop )
34+ squares , cubes := <- squareop , <- cubeop
35+ fmt .Println ("Final output" , squares + cubes )
36+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "fmt"
5+ )
6+
7+ // 打印字符串中的字节
8+ func printBytes (s string ) {
9+ for i := 0 ; i < len (s ); i ++ {
10+ fmt .Printf ("%x " , s [i ])
11+ }
12+ }
13+
14+ // 打印字符串中的字符
15+ func printChars (s string ) {
16+ for i := 0 ; i < len (s ); i ++ {
17+ fmt .Printf ("%c" , s [i ])
18+ }
19+ }
20+
21+ func main () {
22+ name := "Hello World"
23+ printBytes (name )
24+ fmt .Printf ("\n " )
25+ printChars (name )
26+
27+ fmt .Printf ("\n " )
28+ // d
29+ name = "Señor"
30+ printBytes (name )
31+ fmt .Printf ("\n " )
32+ printChars (name )
33+
34+ fmt .Printf ("\n " )
35+ name = "萬少波"
36+ printBytes (name )
37+ fmt .Printf ("\n " )
38+ printChars (name )
39+
40+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "fmt"
5+ )
6+
7+ func printCharsAndBytes (s string ) {
8+ for index , rune := range s {
9+ fmt .Printf ("%c starts at byte %d\n " , rune , index )
10+ }
11+ }
12+
13+ func main () {
14+ name := "Señor"
15+ printCharsAndBytes (name )
16+ }
You can’t perform that action at this time.
0 commit comments