day10协程 入门

master
独孤伶俜 2022-12-18 22:26:13 +08:00
parent 559d9730fd
commit c77a5ee483
1 changed files with 42 additions and 0 deletions

View File

@ -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)
}