理解型別切換錯誤
在Go 中,在非介面變數上使用型別切換會導致錯誤「cannot type switch on非介面值。
在給定的範例中,程式碼嘗試對變數 n(它是一個實例)執行類型切換Number 結構體的。但是,Number 結構體沒有實作任何接口,因此不能直接在類型切換中使用。
解決錯誤
要修復錯誤,您必須先將 n 轉換為 interface{} 類型,它表示一個空介面。這會將 n 轉換為可以容納任何類型的值。然後,在類型開關中,您可以使用 type 關鍵字斷言基礎值的實際類型。
以下是修正後的程式碼的外觀:
import ( "fmt" "strconv" ) type Stringer interface { String() string } type Number struct { v int } func (number *Number) String() string { return strconv.Itoa(number.v) } func main() { n := &Number{1} switch v := interface{}(n).(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
透過此更改,程式碼成功列印「Stringer:1」。
以上是為什麼我的 Go 程式碼會拋出「無法在非介面值上鍵入 switch」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!