是的,主要功能在goroutine(主要程序)中运行。
根据https://tour.golang.org/concurrency/1
goroutine是Go运行时管理的轻量级线程。
go f(x, y, z)开始 运行 新的goroutinef(x, y,z)。对f,x,y和z的求值发生在 当前goroutine中 ,而执行则f发生在 新的goroutine中 。
Goroutine在相同的地址空间中运行,因此必须同步访问共享内存。同步包提供了有用的原语,尽管您在Go中不需要太多,因为还有其他原语。
因此,根据此官方文档,
main可以在 当前goroutine中 运行。
现在让我们玩些乐趣
main并运行它(因此, 当前的goroutine 运行 新的goroutine ),因此,在这里,我们有
多个goroutine 可以
main()再次执行!(注意:对共享内存的访问必须同步):
package mainimport ( "fmt" "time")var i = 3func main() { if i <= 0 { return } i-- fmt.Println("Hi") go main() time.Sleep(100 * time.Millisecond)}输出:
HiHiHi
让我们使用
main()( 一个goroutine- 无需同步)来计算阶乘:
package mainimport "fmt"func main() { if f <= 0 { fmt.Println(acc) return } acc *= f f-- main()}var f = 5var acc = 1输出:
120
注意:上面的代码仅用于清楚地表达我的观点,不适用于生产(使用全局变量不应该是首选)。



