简单的goroutine无法在Windows上运行

lau*_*ent 8 windows go goroutine

我正在用goroutines做一些测试,只是为了了解它们是如何工作的,但它们似乎根本没有运行.我做了一个非常简单的测试:

package main

import (
    "fmt"
)

func test() {
    fmt.Println("test")
}

func main() {
    go test()
}
Run Code Online (Sandbox Code Playgroud)

我希望这打印"测试",但它根本不做任何事情,没有消息,但也没有错误.我也尝试for {}在程序结束时添加一个,以便给goroutine时间打印一些东西,但这没有帮助.

知道可能是什么问题吗?

pet*_*rSO 10

程序执行不等待调用的函数完成

去声明

等一会儿.例如,

package main

import (
    "fmt"
    "time"
)

func test() {
    fmt.Println("test")
}

func main() {
    go test()
    time.Sleep(10 * time.Second)
}
Run Code Online (Sandbox Code Playgroud)

输出:

test
Run Code Online (Sandbox Code Playgroud)

  • 无限循环独占CPU. (7认同)
  • Laurent,尝试导入运行时并添加一个`runtime.GOMAXPROCS(runtime.NumCPU())`告诉Go至少使用系统中的CPU数量.只要它> 1,你的go例程应该能够执行,即使有一个无限循环(由于其他原因这是个坏主意......). (4认同)
  • @Laurent,你应该清楚地知道Go的goroutine不是线程,并且goroutine只会被其他goroutine抢占,因为它会在一些系统(OS)呼叫中等待某些资源(例如通过一个资源发送的详细信息)网络变得可用等)或当它开始在Go频道上等待时. (2认同)

Kir*_*ril 9

我知道它得到了回答,但为了完整起见:

通道

package main

import (
    "fmt"
)

func test(c chan int) {
    fmt.Println("test")

    // We are done here.
    c <- 1
}

func main() {
    c := make(chan int)
    go test(c)

    // Wait for signal on channel c
    <- c
}
Run Code Online (Sandbox Code Playgroud)