首頁 >後端開發 >Golang >Go 類型開關中的多個情況如何導致意外行為?

Go 類型開關中的多個情況如何導致意外行為?

Susan Sarandon
Susan Sarandon原創
2025-01-01 06:35:11920瀏覽

How Can Multiple Cases in Go Type Switches Lead to Unexpected Behavior?

Go 類型切換中的多種情況

將介面值指派給型別切換變數時,結果型別取決於狀況清單結構。 switch-case 語句中的多個 case 清單可能會導致意外行為。

在您提供的程式碼片段中:

switch a := foo.(type){
    case B, A:
        a.test()
}

出現錯誤是因為變數 a 的類型是 interface{} ,而不是 A 或 B。這是因為 case 清單包含多種類型,所以 a 的類型與介面表達式 (foo) 的類型保持一致。

要解析這樣,case 列表應該只包含單一類型:

switch a := foo.(type){
    case A:
        a.test()
}

透過將 case 列表限制為特定類型,變數 a 將具有預期的類型,從而允許方法呼叫成功。

或者,您可以使用斷言表達式明確斷言介面類型:

if a, ok := foo.(tester); ok {
    fmt.Println("foo has test() method")
    a.test()
}

在這種情況下,變數a 僅具有預期類型,如果斷言成功(即ok 為true )。

以上是Go 類型開關中的多個情況如何導致意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn