プログラマは、フィールドをアルファベット順に表示して構造化データ出力を生成するにはどうすればよいでしょうか?具体的には、次の点を考慮してください:
type T struct { B int A int } t := &T{B: 2, A: 1} doSomething(t) fmt.Println(t) // Desired output: &{1 2} — Fields sorted alphabetically
フィールド順序付けによる解決策:
デフォルトでは、構造体は宣言されたフィールド順序を保持します。したがって、必要なフィールド シーケンスを使用して構造体を再定義することで、出力を取得できます。
type T struct { A int B int }
Stringer インターフェイスによる解決策:
もう 1 つのアプローチには、Stringer の実装が含まれます。構造体のインターフェイス:
func (t T) String() string { return fmt.Sprintf("{%d %d}", t.A, t.B) }
fmt パッケージは Stringer をチェックします。
リフレクションによる解決策:
構造体間の柔軟性を高めるために、リフレクションを利用できます。フィールド名の取得、並べ替え、および対応する値の取得が可能です。
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 サイトの他の関連記事を参照してください。