不明なインターフェイスで構造体の値を取得するにはどうすればよいですか{}

核子

構造体があり、そのキーを取得したいのですが、現在はタイプの場合、interface{}どうすればよいですか?

現在、次のコンパイルエラーが発生します。

invalid operation: d[label] (index of type interface {})

再生:http//play.golang.org/p/PLr91d55GX

package main

import "fmt"
import "reflect"

type Test struct {
    s string
}

func main() {
    test := Test{s: "blah"}
    fmt.Println(getProp(test, "s"))
}

func getProp(d interface{}, label string) (interface{}, bool) {
    switch reflect.TypeOf(d).Kind() {
    case reflect.Struct:
        _, ok := reflect.TypeOf(d).FieldByName(label)
        if ok {
                    // errors here because interface{} doesn't have index of type 
            return d[label], true
        } else {
            return nil, false
        }
    }
}

私は本当にそれぞれの異なるタイプで大規模なcaseステートメントを実行し、リフレクトreflect.ValueOf(x).String()などを呼び出す必要がありますか?もっとエレガントな方法があるといいのですが。

我々

これは可能ですsが、構造体メンバーがエクスポートされたフィールドである場合にのみ機能すると思います(つまりS、例では大文字使用します)

func getProp(d interface{}, label string) (interface{}, bool) {
    switch reflect.TypeOf(d).Kind() {
    case reflect.Struct:
        v := reflect.ValueOf(d).FieldByName(label)
             return v.Interface(), true
    }
   return nil, false
}

(+さらにいくつかのエラー処理)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

インターフェイススライスで構造体変数の値を設定するにはどうすればよいですか?

分類Dev

構造体へのポインタを持つ構造体フィールドを取得するにはどうすればよいですか?

分類Dev

インターフェイスを使用してさまざまな構造体を正規化するにはどうすればよいですか?

分類Dev

構造体を物理的に作成せずに、構造体のReflect.Typeインスタンスを取得するにはどうすればよいですか?

分類Dev

Golangで構造体データとインターフェースデータを比較するにはどうすればよいですか?

分類Dev

インターフェイス{}を特定の構造体として関数に渡すにはどうすればよいですか?

分類Dev

LLVMで構造体のメンバーの値を取得するにはどうすればよいですか?

分類Dev

インスタンス化のために構造体のフィールドに制約を追加するにはどうすればよいですか?

分類Dev

matchステートメントでインスタンス化された構造体値を使用するにはどうすればよいですか?

分類Dev

構造体が参照されている他の構造体の存続期間を超えないように、生のポインターを使用して構造体でPhantomDataを使用するにはどうすればよいですか?

分類Dev

構造体オブジェクトがスコープ外になったときに構造体オブジェクト内のポインターを削除するにはどうすればよいですか?

分類Dev

golangのスライスから構造体ポインタを取得するにはどうすればよいですか

分類Dev

Goでデータ構造を含む構造体のサイズを取得するにはどうすればよいですか?

分類Dev

構造体へのポインタの配列を作成するにはどうすればよいですか?

分類Dev

Cの構造体へのポインタを逆参照するにはどうすればよいですか?

分類Dev

リフレクトを使用して、構造体フィールドのタイプがインターフェースかどうかを確認するにはどうすればよいですか?

分類Dev

goのタグではなく、構造体のタイプを使用して構造体を再整列するにはどうすればよいですか?

分類Dev

Racketでコンパイル時の構造体メタデータを提供しながら構造体コンストラクターをオーバーライドするにはどうすればよいですか?

分類Dev

Matlabの構造体から別の構造体にフィールド値をエクスポートするにはどうすればよいですか?

分類Dev

Cの構造体にポインタを割り当てるにはどうすればよいですか?

分類Dev

struct-copyを取得して、元の構造体と同じタイプの構造体を作成するにはどうすればよいですか?

分類Dev

構造体フィールドで型スイッチを使用するにはどうすればよいですか(フィールドがインターフェイス型の場合)?

分類Dev

構造体メンバーのサイズを特定するにはどうすればよいですか?

分類Dev

ライフタイムが異なる複数のstr変数を使用して構造体を構築するにはどうすればよいですか?

分類Dev

異なる構造体へのポインターに同じ関数を実装するにはどうすればよいですか?

分類Dev

Cのプロセス間でポインターを使用して構造体を共有するにはどうすればよいですか?

分類Dev

ある構造体を同じメンバーを持つ別のタイプにキャストするにはどうすればよいですか?

分類Dev

このJavaインターフェースと継承構造をGolangに変換するにはどうすればよいですか?

分類Dev

生のポインタを含む構造体にライフタイムを適用するにはどうすればよいですか?

Related 関連記事

  1. 1

    インターフェイススライスで構造体変数の値を設定するにはどうすればよいですか?

  2. 2

    構造体へのポインタを持つ構造体フィールドを取得するにはどうすればよいですか?

  3. 3

    インターフェイスを使用してさまざまな構造体を正規化するにはどうすればよいですか?

  4. 4

    構造体を物理的に作成せずに、構造体のReflect.Typeインスタンスを取得するにはどうすればよいですか?

  5. 5

    Golangで構造体データとインターフェースデータを比較するにはどうすればよいですか?

  6. 6

    インターフェイス{}を特定の構造体として関数に渡すにはどうすればよいですか?

  7. 7

    LLVMで構造体のメンバーの値を取得するにはどうすればよいですか?

  8. 8

    インスタンス化のために構造体のフィールドに制約を追加するにはどうすればよいですか?

  9. 9

    matchステートメントでインスタンス化された構造体値を使用するにはどうすればよいですか?

  10. 10

    構造体が参照されている他の構造体の存続期間を超えないように、生のポインターを使用して構造体でPhantomDataを使用するにはどうすればよいですか?

  11. 11

    構造体オブジェクトがスコープ外になったときに構造体オブジェクト内のポインターを削除するにはどうすればよいですか?

  12. 12

    golangのスライスから構造体ポインタを取得するにはどうすればよいですか

  13. 13

    Goでデータ構造を含む構造体のサイズを取得するにはどうすればよいですか?

  14. 14

    構造体へのポインタの配列を作成するにはどうすればよいですか?

  15. 15

    Cの構造体へのポインタを逆参照するにはどうすればよいですか?

  16. 16

    リフレクトを使用して、構造体フィールドのタイプがインターフェースかどうかを確認するにはどうすればよいですか?

  17. 17

    goのタグではなく、構造体のタイプを使用して構造体を再整列するにはどうすればよいですか?

  18. 18

    Racketでコンパイル時の構造体メタデータを提供しながら構造体コンストラクターをオーバーライドするにはどうすればよいですか?

  19. 19

    Matlabの構造体から別の構造体にフィールド値をエクスポートするにはどうすればよいですか?

  20. 20

    Cの構造体にポインタを割り当てるにはどうすればよいですか?

  21. 21

    struct-copyを取得して、元の構造体と同じタイプの構造体を作成するにはどうすればよいですか?

  22. 22

    構造体フィールドで型スイッチを使用するにはどうすればよいですか(フィールドがインターフェイス型の場合)?

  23. 23

    構造体メンバーのサイズを特定するにはどうすればよいですか?

  24. 24

    ライフタイムが異なる複数のstr変数を使用して構造体を構築するにはどうすればよいですか?

  25. 25

    異なる構造体へのポインターに同じ関数を実装するにはどうすればよいですか?

  26. 26

    Cのプロセス間でポインターを使用して構造体を共有するにはどうすればよいですか?

  27. 27

    ある構造体を同じメンバーを持つ別のタイプにキャストするにはどうすればよいですか?

  28. 28

    このJavaインターフェースと継承構造をGolangに変換するにはどうすればよいですか?

  29. 29

    生のポインタを含む構造体にライフタイムを適用するにはどうすればよいですか?

ホットタグ

アーカイブ