印刷時に Go 構造体フィールドをアルファベット順に並べ替えるにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-23 05:27:28
オリジナル
996 人が閲覧しました

How to Sort Go Struct Fields Alphabetically When Printing?

構造体フィールドをアルファベット順にレンダリングする方法

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート