問題タブ [go-reflect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
13751 参照

go - golangでは、type自体から、name as stringからreflect.Typeを取得することは可能ですか?

  1. インスタンス化せずにreflect.Typeのt1を取得することは可能ですか?

  2. 文字列として「t1」という名前を持つことからt1のreflect.Typeを取得することは可能ですか?

0 投票する
2 に答える
107049 参照

go - リフレクトを使用して、構造体フィールドの値をどのように設定しますか?

reflectパッケージを使用して構造体フィールドを操作するのに苦労しています。特に、フィールド値の設定方法がわかりません。

  1. フィールドの名前を取得するi-これは機能しているようです

    var field = reflect.TypeOf(r).Field(i).Name

  2. フィールドiの値をa)interface {}、b)intとして取得-これは機能しているようです

    var iface interface{} = reflect.ValueOf(r).Field(i).Interface()

    var i int = int(reflect.ValueOf(r).Field(i).Int())

  3. フィールドiの設定値-試してみてください-パニック

    reflect.ValueOf(r).Field(i).SetInt( i64 )

    パニック:未エクスポートのフィールドを使用して取得した値を使用したreflect.Value・SetInt

    フィールド名「id」と「name」が気に入らなかったと仮定して、「Id」と「Name」に名前を変更しました

    a)この仮定は正しいですか?

    b)正しい場合は、同じファイル/パッケージに含まれているため、必要ないと考えられます

  4. フィールドiの値の設定-2つ試してください(フィールド名は大文字で)-パニック

    reflect.ValueOf(r).Field(i).SetInt( 465 )

    reflect.ValueOf(r).Field(i).SetInt( i64 )

    パニック:アドレス指定できない値を使用するreflect.Value・SetInt


@peterSOによる以下の指示は徹底的で高品質です

四。これは機能します:

reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )

彼はまた、フィールド名がエクスポート可能でなければならないことを文書化しています(大文字で始まる)

0 投票する
4 に答える
66055 参照

go - Goで関数の名前を取得するには?

関数が与えられた場合、その名前を取得することは可能ですか? 言う:

runtime.FuncForPCが役立つと言われましたが、使い方がわかりませんでした。

0 投票する
5 に答える
71618 参照

go - Goで実行時にその型から構造体の新しいインスタンスを作成するにはどうすればよいですか?

Go では、実行時にその型からオブジェクトのインスタンスをどのように作成しますか? typeオブジェクトの実際の値も最初に取得する必要があると思いますか?

メモリを節約するために遅延インスタンス化を試みています。

0 投票する
4 に答える
43950 参照

go - Goで構造体とそのメソッドを名前で呼び出しますか?

MethodByName()ここhttp://golang.org/pkg/reflect/#Value.MethodByNameで関数呼び出しを見つけましたが、それは私が望んでいるものではありません。(多分それを使う方法がわからないので...私はそれでどんな例も見つけることができません)。私が欲しいのは:

だから、まずは次のようなものが必要だと思いますがStructByName()、その後はそれを使ってMethodByName()くださいね!?

0 投票する
3 に答える
19823 参照

go - 最新の Go ウィークリーで 2 つの関数のポインターの等価性を比較するにはどうすればよいですか?

Go で、2 つの非 nil 関数ポインタを比較して等しいかどうかをテストする方法はありますか? 私の平等の基準はポインターの平等です。そうでない場合、ポインターの等価性が許可されない特定の理由はありますか?

今のところ、これを簡単な方法で行おうとすると:

私は得る

この動作が最近導入されたことを理解しています。


Reflect パッケージを使用して答えを見つけました。ただし、Atom は、これが実際には未定義の動作を生成することを以下に示唆しています。詳細と考えられる代替ソリューションについては、Atom の投稿を参照してください。

出力:

0 投票する
2 に答える
23026 参照

go - インスタンスの新しいタイプ(Golang)

文字列からTypeの新しいインスタンスを作成する方法を教えてもらえますか?反射?

例はありますが、古い(Go 1より前のバージョン)言語用です[:(]

0 投票する
4 に答える
16079 参照

go - リフレクションを使用して関数の名前を取得する

Go のリフレクション システムを使用して関数の名前を取得しようとしていますが、その型で Name メソッドを呼び出すと空の文字列が返されます。これは予想される動作ですか?

これは、私が問題にどのようにアプローチするかの簡単な例です。

0 投票する
9 に答える
55999 参照

go - 異なるタイプのスライス間で変換する

UDPソケットからバイトスライス([]byte)を取得し、基になる配列を変更せずに整数スライス([]int32)として扱いたい、またはその逆。C(++)では、ポインタ型間でキャストするだけです。Goでこれをどのように行うのですか?

0 投票する
3 に答える
3160 参照

go - Go: 名前による検索関数

私はタイプセーフに慣れていないので、次のことを行う方法がわかりません