構造体の文字列フィールドの反復
問題:
文字列フィールドの反復構造体の変更は、特にクリーンアップまたは検証操作を実行しようとする場合に課題となります。スイッチケースのアプローチでこれを実装するとスケーラビリティに欠け、アンマーシャリングにゴリラ/スキーマを利用する場合には不向きです。
解決策:
Reflect は構造体を反復処理する手段を提供します。フィールドと文字列フィールドをシームレスに操作します。これを実現する方法は次のとおりです:
例:
<code class="go">package main import ( "fmt" "reflect" "strings" ) type MyStruct struct { A, B, C string I int D string J int } func main() { ms := MyStruct{"Green ", "Eggs", " and ", 2, "Ham ", 15} fmt.Printf("%s%s%s%d%s%d\n", ms.A, ms.B, ms.C, ms.I, ms.D, ms.J) msValuePtr := reflect.ValueOf(&ms) msValue := msValuePtr.Elem() for i := 0; i < msValue.NumField(); i++ { field := msValue.Field(i) if field.Type() != reflect.TypeOf("") { continue } str := field.Interface().(string) str = strings.TrimSpace(str) field.SetString(str) } fmt.Printf("%s%s%s%d%s%d\n", ms.A, ms.B, ms.C, ms.I, ms.D, ms.J) }</code>
注意事項:
以上がGoでリフレクションを使用して構造体の文字列フィールドを反復処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。