ホームページ > バックエンド開発 > Golang > プログラマは Go で構造体フィールドの出力をどのようにアルファベット順に並べることができますか?

プログラマは Go で構造体フィールドの出力をどのようにアルファベット順に並べることができますか?

Linda Hamilton
リリース: 2024-11-23 00:27:11
オリジナル
858 人が閲覧しました

How Can Programmers Alphabetize Struct Field Output in Go?

構造体の印刷出力の変更: アルファベット順フィールドの配置を容易にする

プログラマは、フィールドをアルファベット順に表示して構造化データ出力を生成するにはどうすればよいでしょうか?具体的には、次の点を考慮してください:

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

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