Go 中的錯誤處理:解決「無法在非介面值上進行類型切換」
在嘗試在Go 中實現類型斷言時,您可能會遇到錯誤訊息:「無法在非介面值上鍵入switch」。當嘗試對不是介面類型的值執行類型切換時,會出現此錯誤。
考慮以下程式碼片段:
package main import "fmt" import "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 := n.(type) { case Stringer: fmt.Println("Stringer:", v) default: fmt.Println("Unknown") } }
執行此程式碼時,您將遇到「無法在非介面值上鍵入 switch」錯誤。為了解決這個問題,我們需要在執行類型轉換之前將變數 n 轉換為 interface{} 類型。
switch v := interface{}(n).(type)
此轉換將 n (*Number) 的特定型別轉換為介面類型 interface{ }。 Go 中的介面充當契約,允許透過通用方法儲存和存取任何值。透過將 n 轉換為 interface{},我們可以對產生的介面值執行類型切換。
當我們執行修改後的程式碼時,它將成功列印“Stringer: 1”,如預期的那樣。這表示 Go 中的類型斷言要求值是介面類型,並且轉換為 interface{} 可以在非介面值上進行類型切換。
以上是為什麼我在 Go 中收到「無法在非介面值上進行類型切換」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!