問題タブ [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.
go - golangでは、type自体から、name as stringからreflect.Typeを取得することは可能ですか?
インスタンス化せずにreflect.Typeのt1を取得することは可能ですか?
文字列として「t1」という名前を持つことからt1のreflect.Typeを取得することは可能ですか?
go - リフレクトを使用して、構造体フィールドの値をどのように設定しますか?
reflect
パッケージを使用して構造体フィールドを操作するのに苦労しています。特に、フィールド値の設定方法がわかりません。
フィールドの名前を取得するi-これは機能しているようです
var field = reflect.TypeOf(r).Field(i).Name
フィールドiの値をa)interface {}、b)intとして取得-これは機能しているようです
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
フィールドiの設定値-試してみてください-パニック
reflect.ValueOf(r).Field(i).SetInt( i64 )
パニック:未エクスポートのフィールドを使用して取得した値を使用したreflect.Value・SetInt
フィールド名「id」と「name」が気に入らなかったと仮定して、「Id」と「Name」に名前を変更しました
a)この仮定は正しいですか?
b)正しい場合は、同じファイル/パッケージに含まれているため、必要ないと考えられます
フィールド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 )
彼はまた、フィールド名がエクスポート可能でなければならないことを文書化しています(大文字で始まる)
go - Goで関数の名前を取得するには?
関数が与えられた場合、その名前を取得することは可能ですか? 言う:
runtime.FuncForPCが役立つと言われましたが、使い方がわかりませんでした。
go - Goで実行時にその型から構造体の新しいインスタンスを作成するにはどうすればよいですか?
Go では、実行時にその型からオブジェクトのインスタンスをどのように作成しますか? type
オブジェクトの実際の値も最初に取得する必要があると思いますか?
メモリを節約するために遅延インスタンス化を試みています。
go - Goで構造体とそのメソッドを名前で呼び出しますか?
MethodByName()
ここhttp://golang.org/pkg/reflect/#Value.MethodByNameで関数呼び出しを見つけましたが、それは私が望んでいるものではありません。(多分それを使う方法がわからないので...私はそれでどんな例も見つけることができません)。私が欲しいのは:
だから、まずは次のようなものが必要だと思いますがStructByName()
、その後はそれを使ってMethodByName()
くださいね!?
go - 最新の Go ウィークリーで 2 つの関数のポインターの等価性を比較するにはどうすればよいですか?
Go で、2 つの非 nil 関数ポインタを比較して等しいかどうかをテストする方法はありますか? 私の平等の基準はポインターの平等です。そうでない場合、ポインターの等価性が許可されない特定の理由はありますか?
今のところ、これを簡単な方法で行おうとすると:
私は得る
この動作が最近導入されたことを理解しています。
Reflect パッケージを使用して答えを見つけました。ただし、Atom は、これが実際には未定義の動作を生成することを以下に示唆しています。詳細と考えられる代替ソリューションについては、Atom の投稿を参照してください。
出力:
go - インスタンスの新しいタイプ(Golang)
文字列からTypeの新しいインスタンスを作成する方法を教えてもらえますか?反射?
例はありますが、古い(Go 1より前のバージョン)言語用です[:(]
go - リフレクションを使用して関数の名前を取得する
Go のリフレクション システムを使用して関数の名前を取得しようとしていますが、その型で Name メソッドを呼び出すと空の文字列が返されます。これは予想される動作ですか?
これは、私が問題にどのようにアプローチするかの簡単な例です。
go - 異なるタイプのスライス間で変換する
UDPソケットからバイトスライス([]byte
)を取得し、基になる配列を変更せずに整数スライス([]int32
)として扱いたい、またはその逆。C(++)では、ポインタ型間でキャストするだけです。Goでこれをどのように行うのですか?
go - Go: 名前による検索関数
私はタイプセーフに慣れていないので、次のことを行う方法がわかりません