我一直在學習Go,而對我來說突出的一點是,類型斷言的行爲根據捕獲的返回值的數量而變化:根據返回參數的數量改變行爲,如類型斷言
var i interface{} = "hello"
val, ok := i.(int) // All good
fmt.Println(val, ok)
val = i.(int) // Panics
fmt.Println(val)
這種感覺就像是一種對用戶定義的功能非常有用的模式。用戶必須明確地獲得「ok」第二個返回值或使用下劃線忽略它。無論哪種情況,他們都明確表示他們意識到該功能可能會失敗。而如果他們只獲得一個返回值,它可能會默默地失敗。因此,如果用戶沒有檢查錯誤(如果錯誤應該「從未」發生,這將是合理的),恐慌或類似情況似乎是合理的。我認爲這是語言開發人員使類型斷言以這種方式工作的邏輯。
但是,當我試圖找出如何做到這一點,我什麼也沒有找到。我知道類型斷言不是一個實際的函數。許多具有多個返回值的語言不能檢查實際使用的返回值有多少(MATLAB是我唯一知道的),但是再一次,大多數語言不使用類型斷言所示的行爲。
那麼,有可能,如果是這樣,如何?如果沒有,儘管可以使用內置的類型斷言,但是這種行爲被排除在外是否有特殊原因?
不能編譯分配了錯誤的數字代碼的返回值,所以我不確定你的建議是什麼。錯誤不是「永遠不會發生」的條件,即使在正常情況下也會一直返回並處理錯誤。 – JimB