很多goroutine映射到一个线程。多对1的关系。
chan是go里的一等公民。我们可以往chan里放不同类型的数据。也可以从一个声明的chan里取数据。
demo 从8:00开始
package main import ( "fmt" ) func main() { ch := make(chan string) for i:=0; i < 5000; i++ { // go starts a goroutine go printHelloWorld(i, ch) } for { msg := <- ch fmt.Println(msg) } } func printHelloWorld(i int, ch chan string) { for { ch <- fmt.Sprintf("Hello world from go routine %d!\n", i) } }
Hello World
普通 Hello World
Hello World Server - 读取 url 中的参数
并发 Hello World - 初识 goroutine 与 channel
一个简单的排序
channel是go语言的一等公民,它跟函数一样可以作为参数来使用
fmt.Sprintf
Hello World
Hello World并发版
package main import ( "fmt" "time" ) func main() { for i:=0;i<5;i++ { msg:=i //go starts a goruntine 和main不是等待printHelloWorld结束在运行下去 而是新开了,并发的执行,同时执行 go printHelloWorld(i) fmt.Print(msg) } time.Sleep(time.Microsecond) //fmt.Print(msg) 在此处接收不到 } func printHelloWorld(i int){ fmt.Printf("hello world from gorontine %d!\n",i) }