[解決済み] Goで構造体のフィールドを反復処理する
2022-02-10 02:58:27
質問
基本的に、私が知っている唯一の方法は、以下のフィールドの値を反復処理することです。
struct
は、こんな感じです。
type Example struct {
a_number uint32
a_string string
}
//...
r := &Example{(2 << 31) - 1, "...."}:
for _, d:= range []interface{}{ r.a_number, r.a_string, } {
//do something with the d
}
を実現するための、より良い、より汎用的な方法はないものかと考えていました。
[]interface{}{ r.a_number, r.a_string, }
または、構造体をループで処理する良い方法はありますか?
に目を通そうとしたのですが
reflect
を取り出すと、どうすればいいのかわからなくなり、壁に突き当たります。
reflect.ValueOf(*r).Field(0)
.
ありがとうございます。
解決方法は?
を取得した後
reflect.Value
を使用して、フィールドの
Field(i)
を取得することができます。
を呼び出すことで、インターフェイスの値を取得することができます。
Interface()
. このインターフェース値は
フィールドの値です。
フィールドの値を具象型に変換する関数は存在しない。
ご存知のように、goにはジェネリックがありません。したがって
GetValue() T
と
T
はそのフィールドのタイプです(もちろん、フィールドによって変わります)。
goで実現できる最も近いものは
GetValue() interface{}
であり、これはまさに
reflect.Value.Interface()
を提供します。
次のコードは、構造体のエクスポートされた各フィールドの値を取得する方法を示しています。 を使用して、リフレクション( 遊ぶ ):
import (
"fmt"
"reflect"
)
func main() {
x := struct{Foo string; Bar int }{"foo", 2}
v := reflect.ValueOf(x)
values := make([]interface{}, v.NumField())
for i := 0; i < v.NumField(); i++ {
values[i] = v.Field(i).Interface()
}
fmt.Println(values)
}
関連
-
Windowsのプロパティダイアログボックスのエンコーディングの問題 ファイル名、ディレクトリ名、ボリュームラベルの構文が正しくありません。
-
[解決済み] Goテスト文字列が部分文字列を含む
-
[解決済み] 構造体変数をコンソールに表示するには?
-
[解決済み] Goでオブジェクトの型を見つけるには?
-
[解決済み] 2枚のスライスの等価性を確認する
-
[解決済み】Goのタグはどのような用途に使われますか?
-
[解決済み】Goで設定を処理する方法【終了しました
-
[解決済み】Goはサードパーティ・パッケージをどのようにアップデートしますか?
-
[解決済み】アプリケーションの自動ビルドによるバージョン管理
-
[解決済み】データ(型インターフェース{})を文字列に変換できない:型アサーションが必要
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Goプロセスをフォークする方法を教えてください。
-
[解決済み] キューの実装はありますか?
-
Windowsのプロパティダイアログボックスのエンコーディングの問題 ファイル名、ディレクトリ名、ボリュームラベルの構文が正しくありません。
-
runnerw.exe: CreateProcess はエラー 216 で失敗しました。プロセスが終了し、終了コード 216 が表示された 実行するプロジェクトがこの例外をスローする
-
[解決済み] GOBINが設定されていない:go installを実行できない
-
[解決済み] 地図をコピーするには?
-
[解決済み] Goのペア/タプルデータ型
-
[解決済み] Goで部分文字列を抽出する
-
[解決済み] GOPATHとGOROOTの値はどうすればよいですか?
-
[解決済み】Goのタグはどのような用途に使われますか?