Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mencetak Medan Go Struct dalam Susunan Abjad?

Bagaimana untuk Mencetak Medan Go Struct dalam Susunan Abjad?

Susan Sarandon
Lepaskan: 2024-11-24 19:51:10
asal
348 orang telah melayarinya

How to Print Go Struct Fields in Alphabetical Order?

Cara Mencetak Medan Struktur dalam Susunan Abjad

Dalam Go, medan struct disusun seperti yang ditakrifkan. Oleh itu, jika anda ingin mendapatkan output struct yang diisih mengikut nama medan, penyelesaian paling mudah ialah menyusun medan mengikut abjad dalam pengisytiharan jenis struct.

Contohnya:

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

Walau bagaimanapun, jika anda tidak boleh mengubah suai susunan medan disebabkan pertimbangan susun atur memori, anda mempunyai pilihan:

1. Laksanakan Antara Muka Stringer

Dengan melaksanakan kaedah String(), anda boleh mengawal output struct anda:

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

2. Gunakan Reflection

Reflection menyediakan cara yang fleksibel untuk lelaran ke atas medan struct dan mendapatkan nilainya:

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

Dengan menggunakan fungsi printFields(), anda boleh mendapatkan output yang diisih bagi struct anda.

Atas ialah kandungan terperinci Bagaimana untuk Mencetak Medan Go Struct dalam Susunan Abjad?. 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