From f9859222878d5d302ca5b487e5a942e77d64ff5e Mon Sep 17 00:00:00 2001 From: Sydonian <794346190@qq.com> Date: Fri, 26 May 2023 09:48:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E5=A2=9E=E5=8A=A0=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/logger/logger_test.go | 66 +++++++++++++++++++++++---------------- pkg/logger/utils.go | 18 +++++++++-- 2 files changed, 55 insertions(+), 29 deletions(-) diff --git a/pkg/logger/logger_test.go b/pkg/logger/logger_test.go index 233ebdd..4736ad3 100644 --- a/pkg/logger/logger_test.go +++ b/pkg/logger/logger_test.go @@ -8,32 +8,44 @@ import ( ) func Test_FormatStruct(t *testing.T) { - Convey("检查输出格式", t, func() { - - type Struct2 struct { - Int int - } - - type Struct struct { - Arr []int - NilArr []int - FixedArr [5]int - St2 Struct2 - St2Ptr *Struct2 - NilSt2Ptr *Struct2 - } - - So(fmt.Sprintf("%v", FormatStruct(Struct{ - Arr: []int{1, 2, 3, 4}, - NilArr: nil, - FixedArr: [5]int{1, 2, 3, 4, 5}, - St2: Struct2{ - Int: 123, - }, - St2Ptr: &Struct2{ - Int: 456, - }, - NilSt2Ptr: nil, - })), ShouldEqual, "len(Arr): 4, len(NilArr): 0, len(FixedArr): 5, St2: , St2Ptr: &, NilSt2Ptr: ") + type Struct2 struct { + Int int + } + + type Struct struct { + Arr []int + NilArr []int + FixedArr [5]int + St2 Struct2 + St2Ptr *Struct2 + NilSt2Ptr *Struct2 + } + + st := Struct{ + Arr: []int{1, 2, 3, 4}, + NilArr: nil, + FixedArr: [5]int{1, 2, 3, 4, 5}, + St2: Struct2{ + Int: 123, + }, + St2Ptr: &Struct2{ + Int: 456, + }, + NilSt2Ptr: nil, + } + + fmtedStr := "len(Arr): 4, len(NilArr): 0, len(FixedArr): 5, St2: , St2Ptr: &, NilSt2Ptr: " + + Convey("基本格式", t, func() { + So(fmt.Sprintf("%v", FormatStruct(st)), ShouldEqual, fmtedStr) + }) + + Convey("指针", t, func() { + So(fmt.Sprintf("%v", FormatStruct(&st)), ShouldEqual, fmtedStr) + }) + + Convey("interface", t, func() { + var ift any = st + So(fmt.Sprintf("%v", FormatStruct(ift)), ShouldEqual, fmtedStr) }) } diff --git a/pkg/logger/utils.go b/pkg/logger/utils.go index 0b14051..567e66b 100644 --- a/pkg/logger/utils.go +++ b/pkg/logger/utils.go @@ -16,10 +16,20 @@ func (f *structFormatter) String() string { kind := typ.Kind() - if kind != reflect.Struct { - return fmt.Sprintf("%v", f.val) + if kind == reflect.Struct { + return f.structString(val) } + if kind == reflect.Pointer { + return f.structString(val.Elem()) + } + + return fmt.Sprintf("%v", f.val) +} + +func (f *structFormatter) structString(val reflect.Value) string { + typ := val.Type() + strBuilder := strings.Builder{} for i := 0; i < val.NumField(); i++ { fieldInfo := typ.Field(i) @@ -76,6 +86,10 @@ func (f *structFormatter) String() string { return strBuilder.String() } +// FormatStruct 输出结构体的内容。 +// 1. 数组类型只会输出长度 +// 2. 内部的结构体的内容不会再输出 +// 3. 支持参数是一层的指针 func FormatStruct(val any) any { return &structFormatter{ val: val,