我有以下示例代碼。我想保持4個goroutines始終運行。他們有恐慌的可能性。在恐慌的情況下,我恢復了重新啓動goroutine的地方。Golang,正確的方式來重新啓動一個恐慌的例程
我實施的方式的工作,但我不知道是否正確和正確的方式來做到這一點。任何想法
package main
import (
"fmt"
"time"
)
var gVar string
var pCount int
func pinger(c chan int) {
for i := 0; ; i++ {
fmt.Println("adding ", i)
c <- i
}
}
func printer(id int, c chan int) {
defer func() {
if err := recover(); err != nil {
fmt.Println("HERE", id)
fmt.Println(err)
pCount++
if pCount == 5 {
panic("TOO MANY PANICS")
} else {
go printer(id, c)
}
}
}()
for {
msg := <-c
fmt.Println(id, "- ping", msg, gVar)
if msg%5 == 0 {
panic("PANIC")
}
time.Sleep(time.Second * 1)
}
}
func main() {
var c chan int = make(chan int, 2)
gVar = "Preflight"
pCount = 0
go pinger(c)
go printer(1, c)
go printer(2, c)
go printer(3, c)
go printer(4, c)
var input string
fmt.Scanln(&input)
}
我試過這種方法,它只是不斷添加和添加。你如何限制goroutines的數量?它產卵goroutines這是主要問題 – Sakib
@Sakib你可以做這樣的事情 func main(){ ... for i:= 0;我