嘗試鍵入斷言介面值片段時,您可能會遇到類似下列內容的錯誤:
invalid type assertion: args.([]Symbol) (non-interface type []Node on left)
發生此錯誤是因為切片是不同的非介面類型。為了理解原因,讓我們檢查一下 Go 中介面的本質。
介面是定義值必須實現的一組方法的型別。當你建立一個介面類型的變數時,它的動態類型不是固定的,允許它保存任何實作該介面的類型的值。
但是,切片是特定類型值的集合,它是固定的一種類型。它沒有任何方法,使其成為非介面類型。因此,假設介面值的切片也是一個介面是沒有意義的。
要解決此錯誤,您可以將切片中的值明確轉換為所需的值類型,如以下程式碼所示:
symbols := make([]Symbol, len(args)) for i, arg := range args { symbols[i] = arg.(Symbol) }
此程式碼建立所需類型的新切片並迭代原始切片,將每個值轉換為所需類型。這允許您在程式碼中使用類型斷言值,而不會遇到類型斷言錯誤。
以上是如何在 Go 中輸入斷言介面值片段?的詳細內容。更多資訊請關注PHP中文網其他相關文章!