구조체 필드를 알파벳 순서로 인쇄하는 방법
Go에서 구조체 필드는 정의된 대로 정렬됩니다. 따라서 필드 이름별로 정렬된 구조체의 출력을 얻으려는 경우 가장 간단한 해결책은 구조체 유형 선언에서 필드를 알파벳순으로 정렬하는 것입니다.
예:
type T struct { A int B int }
그러나 메모리 레이아웃 고려 사항으로 인해 필드 순서를 수정할 수 없는 경우 다른 옵션이 있습니다.
1. 스트링거 인터페이스 구현
String() 메서드를 구현하면 구조체의 출력을 제어할 수 있습니다.
func (t T) String() string { return fmt.Sprintf("{%d %d}", t.A, t.B) }
2. Reflection 사용
Reflection은 구조체 필드를 반복하고 해당 값을 얻는 유연한 방법을 제공합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!