埋め込まれた構造体のメソッドから構造体を含むフィールドを反映するにはどうすればよいですか?

火薬:

このプログラムの出力はmap []ですが、map [Id:true name:true]が必要です

私はSQL CRUDコードの一部を枯渇させようとしているのですが、データベースへの読み取りと書き込みを処理する永続化構造体を埋め込むとよいと思いました。以下の例では、永続化構造はInnerで、モデルはOuterになります。ありがとう!

http://play.golang.org/p/fsPqJ-6aLI
package main

import (
    "fmt"
    "reflect"
)

type Inner struct {
}

type Outer struct {
    Inner
    Id   int
    name string
}

func (i *Inner) Fields() map[string]bool {
    typ := reflect.TypeOf(*i)
    attrs := make(map[string]bool)

    if typ.Kind() != reflect.Struct {
        fmt.Printf("%v type can't have attributes inspected\n", typ.Kind())
        return attrs
    }

    // loop through the struct's fields and set the map
    for i := 0; i < typ.NumField(); i++ {
        p := typ.Field(i)
        if !p.Anonymous {
            v := reflect.ValueOf(p.Type)
            v = v.Elem()
            attrs[p.Name] = v.CanSet()

        }
    }

    return attrs
}

func main() {
    val := Outer{}
    fmt.Println(val.Fields()) // prints map[], but I want map[Id:true name:true]
}
JimB:

できません。具体的にInnerは、それが埋め込まれている場所を認識していないでメソッドを呼び出しています埋め込みは継承ではなく、単純な自動委任です。

おそらく、これらを共通の永続化インターフェース、またはデータ型の永続化を処理できる汎用関数でラップする方向を検討する必要があります。


さて、これを実際に試したい場合は、ポインタアドレスを介して外部構造体にアクセスできますが、アクセスしたい外部型を知る必要があります。つまり、リフレクションを介して取得することはできません。

outer := (*Outer)(unsafe.Pointer(i))
typ := reflect.TypeOf(*outer)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

GoでフラットなJSONオブジェクトになるように、埋め込まれた構造体フィールドを持つ構造体をマーシャリングするにはどうすればよいですか?

分類Dev

構造体に特性フィールドを含めるにはどうすればよいですか?

分類Dev

メソッドから構造体のフィールドを変更するにはどうすればよいですか?

分類Dev

親の埋め込み構造体フィールド値を取得するにはどうすればよいですか?

分類Dev

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

分類Dev

JSONに構造体のフィールドを動的に含めたり除外したりするにはどうすればよいですか?

分類Dev

埋め込まれた構造体から構造体フィールドにアクセスする

分類Dev

カスタムUnmarshalJSONメソッドを埋め込み構造体に適用するにはどうすればよいですか?

分類Dev

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

分類Dev

構造体のマクロで構造体に一致する関数メソッドを生成するにはどうすればよいですか?

分類Dev

構造体のマクロで構造体に一致する関数メソッドを生成するにはどうすればよいですか?

分類Dev

ルート構造のフィールドが最初に解析され、次に埋め込まれた構造のフィールドが解析されることを確認するにはどうすればよいですか

分類Dev

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

分類Dev

属性自体で注釈が付けられた構造体のフィールドに属性を提供するにはどうすればよいですか?

分類Dev

構造体配列にフィールドを追加するにはどうすればよいですか?

分類Dev

Goで動的構造体フィールドを設定するにはどうすればよいですか?

分類Dev

mgo、mongodb:埋め込まれた構造体から1つのフィールドに一致するドキュメントを検索する

分類Dev

ANSI C:構造体フィールドを抽象化するにはどうすればよいですか?

分類Dev

フィールドに名前が付けられた構造体をプリティプリントするにはどうすればよいですか?

分類Dev

その配列へのポインタを使用して、構造体の配列に含まれる構造体のフィールドにアクセスするにはどうすればよいですか?[C ++]

分類Dev

構造体の変数メソッドを呼び出すにはどうすればよいですか

分類Dev

ドワーフ情報から構造体メンバーのオフセットを取得するにはどうすればよいですか?

分類Dev

ビットフィールドを持つCスタイルの構造体はRust#[repr(C)]構造体でどのように表されますか?

分類Dev

C ++ソースでThrift構造体のフィールドを適切に設定するにはどうすればよいですか?

分類Dev

これらの配列を取得して、構造体のフィールドに入力するにはどうすればよいですか?

分類Dev

Rustの構造体の配列からフィールド値の配列を取得するにはどうすればよいですか?

分類Dev

あらゆる種類のDeserializable / Serializable構造体を含む構造体を宣言するにはどうすればよいですか?

分類Dev

ある構造体から別の構造体に繰り返しサブ構造体をコピーするにはどうすればよいですか?

分類Dev

埋め込まれた構造体にどのようにデコードできますか?

Related 関連記事

  1. 1

    GoでフラットなJSONオブジェクトになるように、埋め込まれた構造体フィールドを持つ構造体をマーシャリングするにはどうすればよいですか?

  2. 2

    構造体に特性フィールドを含めるにはどうすればよいですか?

  3. 3

    メソッドから構造体のフィールドを変更するにはどうすればよいですか?

  4. 4

    親の埋め込み構造体フィールド値を取得するにはどうすればよいですか?

  5. 5

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

  6. 6

    JSONに構造体のフィールドを動的に含めたり除外したりするにはどうすればよいですか?

  7. 7

    埋め込まれた構造体から構造体フィールドにアクセスする

  8. 8

    カスタムUnmarshalJSONメソッドを埋め込み構造体に適用するにはどうすればよいですか?

  9. 9

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

  10. 10

    構造体のマクロで構造体に一致する関数メソッドを生成するにはどうすればよいですか?

  11. 11

    構造体のマクロで構造体に一致する関数メソッドを生成するにはどうすればよいですか?

  12. 12

    ルート構造のフィールドが最初に解析され、次に埋め込まれた構造のフィールドが解析されることを確認するにはどうすればよいですか

  13. 13

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

  14. 14

    属性自体で注釈が付けられた構造体のフィールドに属性を提供するにはどうすればよいですか?

  15. 15

    構造体配列にフィールドを追加するにはどうすればよいですか?

  16. 16

    Goで動的構造体フィールドを設定するにはどうすればよいですか?

  17. 17

    mgo、mongodb:埋め込まれた構造体から1つのフィールドに一致するドキュメントを検索する

  18. 18

    ANSI C:構造体フィールドを抽象化するにはどうすればよいですか?

  19. 19

    フィールドに名前が付けられた構造体をプリティプリントするにはどうすればよいですか?

  20. 20

    その配列へのポインタを使用して、構造体の配列に含まれる構造体のフィールドにアクセスするにはどうすればよいですか?[C ++]

  21. 21

    構造体の変数メソッドを呼び出すにはどうすればよいですか

  22. 22

    ドワーフ情報から構造体メンバーのオフセットを取得するにはどうすればよいですか?

  23. 23

    ビットフィールドを持つCスタイルの構造体はRust#[repr(C)]構造体でどのように表されますか?

  24. 24

    C ++ソースでThrift構造体のフィールドを適切に設定するにはどうすればよいですか?

  25. 25

    これらの配列を取得して、構造体のフィールドに入力するにはどうすればよいですか?

  26. 26

    Rustの構造体の配列からフィールド値の配列を取得するにはどうすればよいですか?

  27. 27

    あらゆる種類のDeserializable / Serializable構造体を含む構造体を宣言するにはどうすればよいですか?

  28. 28

    ある構造体から別の構造体に繰り返しサブ構造体をコピーするにはどうすればよいですか?

  29. 29

    埋め込まれた構造体にどのようにデコードできますか?

ホットタグ

アーカイブ