Я новичок в Голанде и раньше занимался Java.Я написал функцию Голанга для вычисления части результата с целым числом.Я думаю об использовании таймера для вычисления и генерации случайного числа.Но я столкнулся с одной проблемой: если в подпрограмме есть какая-то ошибка, основной поток остановится.Есть ли способ сохранить работоспособность основного потока?Даже если в процедуре есть ошибки?
Ниже приведен код для теста:
func main() {
ticker := time.NewTicker(1*1000 * time.Millisecond)
for _ = range ticker.C {
rand.Seed(time.Now().Unix())
divisor := rand.Intn(20)
go calculate(divisor)
}
}
func calculate(divisor int){
result:= 100/divisor
fmt.Print("1/"+strconv.Itoa(divisor)+"=")
fmt.Println(result)
}
Поскольку обработка ошибок для Golang действительно смутила меня, я думаю, что ошибка возникает в«поток», основная функция просто отвечает за создание потока и назначение задачи, она не должна обращать внимания на то, есть ли исключения в «потоках», и функция main всегда должна продолжаться.Если бы я делал это в Java, я мог бы использовать try catch для окружения с
try{
result = 1/divisor;
}
catch(Exception e){
e.printTrace();
}
даже каждый раз, когда я даю делителю значение 0 в отдельном потоке, основной прогресс не завершится, но для Голанга ядумаю, что
go calculate(divisor)
открывает новый «поток» и запускает вычисление внутри «потока», но почему основной прогресс завершится.Есть ли какой-нибудь способ предотвратить выход основного прогресса?
Спасибо.