如何按字母順序列印結構體欄位
在 Go 中,結構體的欄位依照定義的順序排序。因此,如果您想要獲得按欄位名稱排序的結構體的輸出,最簡單的解決方案是在結構體類型聲明中按字母順序排列欄位。
例如:
type T struct { A int B int }
但是,如果由於記憶體佈局考慮而無法修改欄位順序,您還有其他選擇:
1.實作Stringer 介面
透過實作String()方法,您可以控制結構體的輸出:
func (t T) String() string { return fmt.Sprintf("{%d %d}", t.A, t.B) }
2.使用反射
反射提供了一種靈活的方式來迭代結構體字段並獲取其值:
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() }
透過呼叫printFields() 函數,可以得到排序後的輸出你的結構。
以上是如何以字母順序列印 Go 結構體欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!