Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Pengaturcara Boleh Menghuruf Output Medan Struktur dalam Go?

Bagaimanakah Pengaturcara Boleh Menghuruf Output Medan Struktur dalam Go?

Linda Hamilton
Lepaskan: 2024-11-23 00:27:11
asal
880 orang telah melayarinya

How Can Programmers Alphabetize Struct Field Output in Go?

Mengubah Output Cetakan Struktur: Memudahkan Susunan Medan Abjad

Bagaimanakah pengaturcara boleh menjana output data berstruktur dengan memaparkan medan dalam susunan abjad? Khususnya, pertimbangkan perkara berikut:

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

Penyelesaian melalui Susunan Medan:

Secara lalai, struct mengekalkan susunan medan yang diisytiharkan. Oleh itu, dengan mentakrifkan semula struct dengan jujukan medan yang dikehendaki, output boleh diperolehi:

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

Penyelesaian melalui Antaramuka Stringer:

Pendekatan lain melibatkan pelaksanaan Stringer antara muka untuk struct:

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

Pakej fmt menyemak untuk Pelaksanaan Stringer dan menggunakan kaedah String() untuk penjanaan output.

Penyelesaian melalui Refleksi:

Untuk fleksibiliti merentas struktur, refleksi boleh digunakan. Nama medan boleh diperolehi, diisih dan nilainya yang sepadan diambil semula.

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 Bagaimanakah Pengaturcara Boleh Menghuruf Output Medan Struktur dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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