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