首頁 > 後端開發 > Golang > 為什麼我的 Go 程式碼會拋出「無法在非介面值上鍵入 switch」錯誤?

為什麼我的 Go 程式碼會拋出「無法在非介面值上鍵入 switch」錯誤?

Mary-Kate Olsen
發布: 2024-11-10 15:15:02
原創
394 人瀏覽過

Why does my Go code throw a

理解型別切換錯誤

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板