在主线程中开启一个goroutines,该协程每隔一秒输出“hello,world”,在主线程中也每隔一秒输出“hello,goland”,输出10次后退出程序,要求主线程和goroutine同时执行;
时间: 2024-02-21 18:59:54 浏览: 234
可以通过使用`go`关键字在主线程中开启一个goroutine,然后在该goroutine中使用`time`包的`Ticker`类型来定时输出“hello,world”,同时在主线程中也使用`Ticker`类型来定时输出“hello,goland”,并使用`time.Sleep()`来控制程序退出。
以下是示例代码:
```go
package main
import (
"fmt"
"time"
)
func main() {
worldTicker := time.NewTicker(time.Second)
golandTicker := time.NewTicker(time.Second)
done := make(chan bool)
go func() {
count := 0
world := "hello, world"
for {
select {
case <-worldTicker.C:
fmt.Println(world)
default:
}
count++
if count >= 10 {
done <- true
return
}
}
}()
count := 0
goland := "hello, golang"
for {
select {
case <-golandTicker.C:
fmt.Println(goland)
case <-done:
golandTicker.Stop()
fmt.Println("Done")
return
}
count++
if count >= 10 {
golandTicker.Stop()
fmt.Println("Done")
return
}
}
}
```
在该代码中,我们创建了两个`Ticker`类型的变量`worldTicker`和`golandTicker`,分别用于输出“hello,world”和“hello,goland”。我们还创建了一个`done`通道,用于在goroutine中计数到10次后通知主线程退出程序。
在主函数中,我们使用`go`关键字开启了一个goroutine,该goroutine中使用`select`语句监听`worldTicker.C`通道,每当该通道有值时,即每隔一秒输出“hello,world”。同时,我们在主函数中也使用`select`语句监听`golandTicker.C`和`done`两个通道,每当`golandTicker.C`有值时,即每隔一秒输出“hello,goland”,每当`done`通道有值时,即计数到10次后,停止`golandTicker`并输出“Done”,然后程序退出。
通过使用`Ticker`类型和`select`语句,我们可以让主线程和goroutine同时执行,并且控制程序的退出。
阅读全文