簡體   English   中英

什么是Go相當於'throws'條款?

[英]What is Go's equivalent to 'throws' clause?

我只是在學習Go編程語言 我剛剛讀到了Go錯誤處理的方式。 有一個很好的解釋,但我有一些混亂。 在Go中處理錯誤的典型方法是將錯誤作為函數的第二個值返回:

f, err := Sqrt(-1)
if err != nil {
    fmt.Println(err)
}

很簡單。 但是,假設我是一名圖書館開發人員,我可能想知道客戶端我的函數可能會拋出一些錯誤,而客戶端必須處理它。

在Java中,我有throws條款。 所以,客戶必須把它放在那些try...catch塊中

在Go中,我可以從函數返回錯誤; 但是,如果圖書館的客戶避免處理它,那么我該如何優雅地告訴他處理它?

編輯:我只是在探索一種語言。 不要試圖將Java的思維與Go混合,尊重每個人的理念。 我剛問過,因為我想知道是否有任何關鍵字,因為我還沒有學到Go。

這就是Go的理念:如果開發人員發現函數返回錯誤,那么他就有責任檢查錯誤。 編程語言不會強迫你這樣做。

Rob Pike背后的推理是錯誤不是特殊的,因此,不需要專門的語言構造(即try/catch )來處理它們。

您的庫也應該通過其公開的函數傳遞錯誤。 您會注意到std庫中的許多方法都有返回值和錯誤,因此人們應該習慣於處理錯誤。

如果你真的想要有類似於java的行為你可以使用panic(),但golang恐慌中的注意事項應僅用於不可恢復的錯誤或程序員錯誤(不是可以從中恢復的運行時錯誤)

無論哪種方式,您都無法強制客戶端處理它。 這是他們的責任。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM