前言
Go 语言本身支持并发, 只需要通过 Go来启动goroutine就可以了, 语法格式也很简单, 就直接在调用方法前加上go 关键字就可以了, 例如
go hello(x)
遇到的问题
Go 允许使用go 语句开启一个goroutine (线程)去执行这个函数, 很简单, 但是有一个新手需要注意的地方(比如我), 那就是函数运行时间和进程的运行时间, 因为go语句是开启一个新的, 刚创建的goroutine去运行这个函数, 但是本身的主进程还会继续运行, 所以, 如果你只写一个go语句, 后面没有可以运行程序的话就会出现一个尴尬的问题, 主进程直接关闭, 对应goroutine也直接关闭,导致函数没有运行
可以参考一下下面的例子
package main
import (
"fmt"
"time"
)
func hello(aa string) {
for a := 0; a < 3; a++ {
fmt.Println(aa)
time.Sleep(3 * time.Second)
}
}
func main() {
go hello("小飞")
go hello("飞啊飞")
// time.Sleep(100 * time.Second) 不加这行代码的话就会出现这种情况
}
运行良好的结果
飞啊飞
小飞
小飞
飞啊飞
小飞
飞啊飞
可以看到顺序不固定, 因为是多个goroutine执行的