Go世界裏,每個併發執行的活動成爲goroutine。css
經過建立goroutine,就能夠實現並行運算,十分方便。
算法
若是有函數f(),那麼:markdown
f():調用函數f(),而且等待它返回併發
go f():新建一個調用f()的goroutine,不等待函數
Go語言程序:spa
// fib project main.go package main import ( "fmt" "time" ) func main() { go spinner(1000 * time.Millisecond) const n = 46 fibN := fib(n) // slow fmt.Printf("\rFibonacci(%d) = %d\n", n, fibN) } func spinner(delay time.Duration) { for { for i, r := range "abcd" { fmt.Printf("%d: %c\n", i, r) time.Sleep(delay) } } } func fib(x int64) int64 { if x < 2 { return x } return fib(x-2) + fib(x-1) }
運行結果:.net
0: a 1: b 2: c 3: d 0: a 1: b 2: c 3: d 0: a 1: b 2: c 3: d 0: a 1: b 2: c 3: d 0: a 1: b 2: c 3: d 0: a 1: b 2: c 3: d 0: a Fibonacci(46) = 1836311903
程序說明:code
1.函數spinner()是個死循環,循環輸出字符串中的一個字符,而後進入睡眠狀態1秒鐘blog
2.函數fib()是遞歸算法的計算程序,很是慢,尤爲是調查用時代入的參數是46,實際運行實際大概是25秒遞歸
3.函數main()結束時,會強制終結全部的goroutine,而後退出程序