Bagaimana Mengisih Medan Go Struct Mengikut Abjad Semasa Mencetak?

Patricia Arquette
Lepaskan: 2024-11-23 05:27:28
asal
1002 orang telah melayarinya

How to Sort Go Struct Fields Alphabetically When Printing?

Cara Menghasilkan Medan Struktur dalam Susunan Abjad

Struktur dalam Go memiliki medan tertib. Walau bagaimanapun, mencetak struct menggunakan pakej pemformatan (fmt) membentangkan medan dalam urutan bukan abjad. Artikel ini mendalami teknik untuk mengisih medan struct dalam susunan abjad.

Pratakrif Medan dalam Susunan Abjad

Pendekatan langsung adalah untuk mengisytiharkan struct dengan medan yang disusun dalam susunan abjad. Kaedah ini mudah dan memastikan susunan yang betul tanpa mengira pantulan atau pemformatan tersuai.

type T struct {
    A int
    B int
}
Salin selepas log masuk

Laksanakan Antara Muka Stringer

Dengan melaksanakan antara muka Stringer dengan String() kaedah, anda boleh menyesuaikan cara struct dipaparkan. Kaedah ini membolehkan anda menentukan susunan medan dalam output.

func (t T) String() string {
    return fmt.Sprintf("{%d %d}", t.A, t.B)
}
Salin selepas log masuk

Gunakan Refleksi

Reflection menawarkan penyelesaian komprehensif yang terpakai pada mana-mana struct tanpa mengira jenis atau definisi pakej. Ia melibatkan mendapatkan nama medan, mengisihnya dan kemudian mengakses nilai medan berdasarkan nama yang diisih.

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()
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Mengisih Medan Go Struct Mengikut Abjad Semasa Mencetak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan