day10协程 入门
parent
559d9730fd
commit
c77a5ee483
|
@ -0,0 +1,42 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// 可以把goroutine理解为轻量级的线程,
|
||||||
|
// goroutine是由Go运行时环境管理的,
|
||||||
|
// goroutine的调度是由Go运行时进行管理的。
|
||||||
|
|
||||||
|
// 当一个go程序运行时,Go运行时会为其创建一个主goroutine来执行主函数,
|
||||||
|
// 新的goroutine使用go关键字来创建,
|
||||||
|
// go语句是在一个普通的函数或者方法调用前加上go关键字,
|
||||||
|
// 该函数或者方法就会在一个新的goroutine中并发执行。
|
||||||
|
|
||||||
|
// 并发的调用spinner函数
|
||||||
|
// 该函数会一直打印转动的动画
|
||||||
|
go spinner(100 * time.Millisecond)
|
||||||
|
const n = 45
|
||||||
|
fibN := fib(n) // slow
|
||||||
|
fmt.Printf("\rFibonacci(%d) = %d\n", n, fibN)
|
||||||
|
}
|
||||||
|
|
||||||
|
func spinner(delay time.Duration) {
|
||||||
|
for {
|
||||||
|
for _, r := range `-\|/` {
|
||||||
|
// \r表示回车,不换行
|
||||||
|
// 就是回到行首,覆盖之前的输出
|
||||||
|
fmt.Printf("\r%c", r)
|
||||||
|
time.Sleep(delay)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fib(x int) int {
|
||||||
|
if x < 2 {
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
return fib(x-1) + fib(x-2)
|
||||||
|
}
|
Loading…
Reference in New Issue