代码拉取完成,页面将自动刷新
package gutil
import (
"fmt"
"log"
"reflect"
)
type format struct {
indent string
interval string
level int
}
func newFormat(v any, ind string, int string) string {
f := &format{
indent: ind,
interval: int,
level: 1,
}
return f.start(v)
}
func (f *format) start(v any) string {
var types = reflect.TypeOf(v)
var values reflect.Value
// 自定义类型名称
name := types.String()
// 变量类型
kind := types.Kind().String()
// 指针 取原始类型
if kind == "ptr" {
types = types.Elem()
values = reflect.ValueOf(v).Elem()
kind = types.Kind().String()
} else {
values = reflect.ValueOf(v)
}
var tempName string
if name != kind {
tempName = name + " <" + kind + ">"
} else {
tempName = name
}
var result string
switch kind {
case "struct":
result = f.formatStruct(tempName, types, values)
case "slice", "array":
result = f.formatSlice(tempName, values)
case "map":
result = f.formatMap(tempName, values)
case "chan":
result = tempName + " " + fmt.Sprint(values)
}
return result
}
func (f *format) formatStruct(name string, types reflect.Type, values reflect.Value) string {
result := name + " {\n"
for i := 0; i < types.NumField(); i++ {
result += f.indent + types.Field(i).Name + ": " + fmt.Sprint(values.Field(i))
if i == types.NumField()-1 {
break
}
result += f.interval
}
return result + "\n}"
}
func (f *format) formatSlice(name string, values reflect.Value) string {
result := name + " [\n"
for i := 0; i < values.Len(); i++ {
result += f.indent + fmt.Sprint(values.Index(i))
if i == values.Len()-1 {
break
}
result += f.interval
}
return result + "\n]"
}
func (f *format) formatMap(name string, values reflect.Value) string {
result := name + " {\n"
keys := values.MapKeys()
for i, v := range keys {
result += f.indent + v.String() + ": " + fmt.Sprint(values.MapIndex(v))
if i == len(keys)-1 {
break
}
result += f.interval
}
return result + " \n}"
}
// Println 格式化打印
func Println(v ...any) {
for _, item := range v {
s := newFormat(item, " ", "\n")
fmt.Println(s)
}
}
// Sprintln 格式化输出
func Sprintln(v any) string {
return newFormat(v, " ", "\n")
}
// LogPrintln 格式化log打印
func LogPrintln(v ...any) {
for _, item := range v {
s := newFormat(item, " ", "\n")
log.Println(s)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。