構造体フィールドをアルファベット順にレンダリングする方法
Go の構造体は順序付けされたフィールドを持っています。ただし、書式設定パッケージ (fmt) を使用して構造体を出力すると、フィールドがアルファベット順以外の順序で表示されます。この記事では、構造体フィールドをアルファベット順に並べ替えるテクニックについて詳しく説明します。
アルファベット順にフィールドを事前定義する
直接的なアプローチは、フィールドが次のように配置された構造体を宣言することです。アルファベット順。このメソッドはシンプルで、リフレクションやカスタム書式設定に関係なく正しい順序付けを保証します。
type T struct { A int B int }
Stringer インターフェイスを実装する
String() を使用して Stringer インターフェイスを実装することにより、メソッドを使用すると、構造体の表示方法をカスタマイズできます。このメソッドを使用すると、出力内のフィールドの順序を指定できます。
func (t T) String() string { return fmt.Sprintf("{%d %d}", t.A, t.B) }
Reflection を使用する
Reflection は、型に関係なくあらゆる構造体に適用される包括的なソリューションを提供します。またはパッケージ定義。これには、フィールド名の取得、それらの並べ替え、並べ替えられた名前に基づいたフィールド値へのアクセスが含まれます。
func printFields(st interface{}) string { t := reflect.TypeOf(st) names := make([]string, t.NumField()) for i := range names { names[i] = t.Field(i).Name } sort.Strings(names) v := reflect.ValueOf(st) buf := &bytes.Buffer{} buf.WriteString("{") for i, name := range names { val := v.FieldByName(name) if !val.CanInterface() { continue } if i > 0 { buf.WriteString(" ") } fmt.Fprintf(buf, "%v", val.Interface()) } buf.WriteString("}") return buf.String() }
以上が印刷時に Go 構造体フィールドをアルファベット順に並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。