ホームページ >バックエンド開発 >Golang >Golangでメソッドなしでインターフェイスとして渡された匿名構造体のフィールドにアクセスする方法は?

Golangでメソッドなしでインターフェイスとして渡された匿名構造体のフィールドにアクセスする方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-04 11:54:01929ブラウズ

How to Access Fields of an Anonymous Struct Passed as an Interface with No Methods in Golang?

メソッドのないインターフェース: Golang でのカスタム型へのアクセス

Golang では、匿名の構造体を作成し、インターフェース型を受け入れる関数に引数として渡すことができます。ただし、インターフェイスにメソッドが定義されていない場合、匿名構造体のフィールドに直接アクセスすることはできません。

次のコード例を考えてみましょう:

<code class="go">func NewJob(t string, name string, c func(), v interface{}) {
    // ...
}

func Custom(name string) interface{} {
    // ...
}

main() {
    gojob.NewJob("every 2 seconds", "pene", func() {
        t := gojob.Custom("pene")
        fmt.Println(t) // Prints "{1}"
        fmt.Println(t.Id) // Error: t.Id undefined (type interface {} is interface with no methods)
    }, struct {
        Id int
    }{
        1,
    })
}</code>

この例では、匿名の構造体を v 引数として NewJob に渡します。 Custom 関数は、「pene」という名前に関連付けられたカスタム値を取得し、インターフェースとして返します。

ゴルーチン内の匿名構造体の ID フィールドにアクセスしようとすると、エラー「」が発生します。 t.IDが未定義です」。これは、interface{} 型にはメソッドが定義されていないため、具体的な型のように扱うことができないためです。

匿名構造体のフィールドにアクセスするには、互換性のある型に型アサートする必要があります。 。この場合、v には int 型の Id フィールドを持つ匿名構造体が含まれていることがわかります。次の構文を使用してアサートを入力できます。

<code class="go">id := v.(struct{Id int}).Id</code>

これにより、interface{} 値 v が ID フィールドを持つ具体的な構造体に変換され、直接アクセスできるようになります。

Interface{} 値を型アサートすることで、匿名構造体のフィールドにアクセスし、必要に応じてそれらを使用できます。

以上がGolangでメソッドなしでインターフェイスとして渡された匿名構造体のフィールドにアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。