프로그래머는 필드를 알파벳 순서로 표시하여 어떻게 구조화된 데이터 출력을 생성할 수 있습니까? 특히 다음을 고려하십시오.
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
필드 순서 지정을 통한 솔루션:
기본적으로 구조체는 선언된 필드 순서를 유지합니다. 따라서 원하는 필드 시퀀스로 구조체를 재정의하면 출력을 얻을 수 있습니다.
type T struct { A int B int }
Stringer 인터페이스를 통한 솔루션:
또 다른 접근 방식은 Stringer를 구현하는 것입니다. 구조체 인터페이스:
func (t T) String() string { return fmt.Sprintf("{%d %d}", t.A, t.B) }
fmt 패키지는 Stringer 구현을 확인하고 출력 생성을 위해 String() 메서드를 활용합니다.
반사를 통한 솔루션:
구조체 전반에 걸친 유연성을 위해 반사를 활용할 수 있습니다. 필드 이름을 얻고, 정렬하고 해당 값을 검색할 수 있습니다.
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() }
위 내용은 프로그래머는 Go에서 구조체 필드 출력을 어떻게 알파벳순으로 정렬할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!