- goroutine
- channel通道 (goroutine通信)
package main
import "fmt"
func main() {
var ch1 chan bool
ch1 = make(chan bool)
go func() {
for i := 0; i < 10; i++ {
fmt.Println("子goroutine:", i)
}
ch1 <- true
fmt.Println("over")
}()
<-ch1
fmt.Println("main over")
}
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan int)
go sendData(ch1)
for {
time.Sleep(1 * time.Second)
v, ok := <-ch1
if !ok {
fmt.Println("读完了 over")
break
}
fmt.Println("读取数据", v)
}
for v := range ch1 {
fmt.Println("数据:", v)
}
fmt.Println("main.... over...")
}
func sendData(ch1 chan int) {
for i := 0; i < 10; i++ {
time.Sleep(1 * time.Second)
ch1 <- i
}
close(ch1)
}
package main
import (
"fmt"
"strconv"
)
func main() {
ch1 := make(chan int)
fmt.Println(len(ch1), cap(ch1))
ch1 <- 100
ch2 := make(chan int, 5)
fmt.Println(len(ch2), cap(ch2))
ch2 <- 100
fmt.Println(len(ch2), cap(ch2))
ch3 := make(chan string, 4)
go sendData(ch3)
for {
v, ok := <-ch3
if !ok {
fmt.Println("读完了...", ok)
break
}
fmt.Println("读取的数据是:", v)
}
fmt.Println("main over")
}
func sendData(ch chan string) {
for i := 0; i < 10; i++ {
ch <- "data" + strconv.Itoa(i)
fmt.Printf("子gorountine第%d个数据", i)
}
close(ch)
}
package main
import "fmt"
func main() {
ch1 := make(chan string)
ch2 := make(chan<- int)
ch3 := make(<-chan int)
go sendData(ch1)
data := <-ch1
fmt.Println("子roroutine数据", data)
ch1 <- "我是main"
}
func sendData(ch1 chan string) {
ch1 <- "我是子"
data := <-ch1
fmt.Println("main goroutine传来:", data)
}