亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

即使例程在 Golang 中發生“運行時錯誤”,如何“保持主線程運行”?

即使例程在 Golang 中發生“運行時錯誤”,如何“保持主線程運行”?

Go
白板的微信 2023-04-04 17:13:05
我是 Goland 的新手,過去我用過 Java。我寫了一個 Golang 函數來計算結果的整數部分。我在想的是使用計時器進行計算并生成隨機數。但我遇到的一個問題是,如果例程出現錯誤,主線程將停止。有沒有辦法讓主線程繼續運行?即使例行程序有錯誤?下面是測試代碼: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函數只是負責創建線程和分配任務,應該不會在乎是否有異常發生“線程”和 main 應該始終保持運行。如果我在 Java 中這樣做,我可以使用 try catch 來包圍try{    result = 1/divisor;}catch(Exception e){    e.printTrace();}甚至每次在單獨的線程中給divisor一個0值,主進程都不會退出,但是對于Golang,我覺得go calculate(divisor)正在開一個新的“線程”,在“線程”里面運行計算,但是為什么主進程會退出。有沒有什么方法可以防止主要進度退出?謝謝。
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

使用延遲/恢復功能


package main


import (

    "fmt"

    "time"

    "math/rand"

)


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)

    }

fmt.Println("that's all")

}




func calculate(divisor int){

defer func() {

        if r := recover(); r != nil {

            fmt.Println("Recovered in f", r)

        }

    }()

    result:= 100/divisor

    fmt.Printf("1/%d=", divisor)

    fmt.Println(result)

}


查看完整回答
反對 回復 2023-04-04
  • 1 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號