首頁 > 後端開發 > Golang > 為什麼 Go 中具有多個 case 的類型切換會導致「未定義」變數錯誤,如何解決?

為什麼 Go 中具有多個 case 的類型切換會導致「未定義」變數錯誤,如何解決?

Mary-Kate Olsen
發布: 2024-12-16 10:53:11
原創
305 人瀏覽過

Why Does a Type Switch with Multiple Cases in Go Cause

Go 中具有多種情況的類型開關

當使用具有多種情況的類型開關時,可能會遇到錯誤,指出變數具有多種類型的情況是未定義的。此行為源自於 Go 語言規範,該規範規定類型切換保護可以包含簡短的變數聲明。

在這種情況下,變數的類型與單一類型情況中列出的類型相同。但是,在具有多種類型清單的情況下,變數具有類型開關保護中表達式的類型。

為了說明這一點,請考慮以下程式碼:

type A struct {
  a int
}

func (this *A) test() {
  fmt.Println(this)
}

type B struct {
  A
}

var foo interface{}
foo = A{}

switch a := foo.(type) {
  case B, A:
    a.test()
}
登入後複製

執行此程式碼將導致錯誤「a.test undefined(類型interface {}是沒有方法的介面)」。這是因為變數 a 具有類型 interface{},而不是特定情況的類型。

要解決此問題,可以斷言類型開關保護表達式具有預期的方法。例如:

type tester interface {
  test()
}

func main() {
  var foo interface{}
  foo = &B{}

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

這段程式碼先檢查 foo 是否有 test() 方法,如果有,則將 foo 的值賦給 a 並呼叫 test() 方法。

以上是為什麼 Go 中具有多個 case 的類型切換會導致「未定義」變數錯誤,如何解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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