Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Pengaturcara Boleh Menghuruf Output Medan Struktur dalam Go?
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
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 }
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) }
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() }
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!