reflectパッケージを使用して構造体フィールドを操作するのに苦労しています。特に、フィールド値の設定方法がわかりません。
タイプtstruct{fi int; fs文字列}
var rt = t {123、"jblow"}
var i64 int64 = 456
フィールドの名前を取得する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 )
彼はまた、フィールド名がエクスポート可能でなければならないことを文書化しています(大文字で始まる)