ホームページ > バックエンド開発 > Golang > メソッドエラーを避けるために、Go の型スイッチで複数のケースを正しく使用する方法は?

メソッドエラーを避けるために、Go の型スイッチで複数のケースを正しく使用する方法は?

Barbara Streisand
リリース: 2024-12-18 10:37:10
オリジナル
194 人が閲覧しました

How to Correctly Use Multiple Cases in Go's Type Switch to Avoid Method Errors?

複数のケースを使用した型切り替え

Go では、型切り替えステートメントを使用して、型に基づいて対応するケースを動的に選択できます。値。 1 つのケースで複数の型が指定されている場合、値の型がリストされている型のいずれにも一致しない場合、エラーが発生する可能性があります。

次のコード スニペットを検討してください:

package main

import (
    "fmt"
)

type A struct {
    a int
}

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

type B struct {
    A
}

func main() {
    var foo interface{}
    foo = A{}
    switch a := foo.(type){
        case B, A:
            a.test()
    }
}
ログイン後にコピー

このコードを実行すると、次のエラーが生成されます:

a.test undefined (type interface {} is interface with no methods)
ログイン後にコピー

このエラーは、変数 a の型が次であるため、型の切り替えが有効にならなかったことを示します。

Go 言語仕様では、型切り替えステートメントで 1 つのケースに複数の型が指定されている場合、そのケースで宣言された変数にはタイプ スイッチ ガード内の式のタイプ (この場合は foo)。 foo はインターフェイス{} タイプであるため、a もインターフェイス{} タイプになります。

この問題を解決して test() メソッドを確実に呼び出せるようにするには、foo に test(

package main

import (
    "fmt"
)

type A struct {
    a int
}

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

type B struct {
    A
}

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() メソッドがあることをアサートすることで、適切な型の値を取得して test() メソッドを呼び出すことができます。成功しました。

以上がメソッドエラーを避けるために、Go の型スイッチで複数のケースを正しく使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート