first commit
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
package baseutils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// ShowObjectValue 打印对象完整信息
|
||||
func ShowObjectValue(object interface{}) {
|
||||
dataType := reflect.TypeOf(object)
|
||||
if dataType.Kind() == reflect.Ptr {
|
||||
dataType = dataType.Elem()
|
||||
}
|
||||
|
||||
ShowStructValue(object, dataType.Name())
|
||||
}
|
||||
|
||||
// ShowStructValue 打印响应信息
|
||||
func ShowStructValue(object interface{}, tag string) {
|
||||
dataValue := reflect.ValueOf(object)
|
||||
dataType := reflect.TypeOf(object)
|
||||
|
||||
if dataType.Kind() == reflect.Ptr {
|
||||
if dataValue.IsNil() {
|
||||
fmt.Println(tag, " = nil")
|
||||
return
|
||||
}
|
||||
|
||||
dataValue = dataValue.Elem()
|
||||
dataType = dataType.Elem()
|
||||
}
|
||||
|
||||
num := dataType.NumField()
|
||||
for i := 0; i < num; i++ {
|
||||
field := dataType.Field(i)
|
||||
fieldName := field.Name
|
||||
fieldValue := dataValue.FieldByName(fieldName)
|
||||
|
||||
if fieldName == "XXX_unrecognized" ||
|
||||
fieldName == "XXX_sizecache" {
|
||||
continue
|
||||
}
|
||||
|
||||
ShowFieldValue(fieldValue, tag+"."+fieldName)
|
||||
}
|
||||
}
|
||||
|
||||
// ShowFieldValue 打印某个属性的值
|
||||
func ShowFieldValue(fieldValue reflect.Value, tag string) {
|
||||
realValue := fieldValue
|
||||
fieldType := fieldValue.Type()
|
||||
|
||||
// 判断是否有效
|
||||
if !fieldValue.IsValid() {
|
||||
fmt.Println(tag, "= nil")
|
||||
return
|
||||
}
|
||||
|
||||
// 如果是指针
|
||||
if fieldType.Kind() == reflect.Ptr {
|
||||
realValue = fieldValue.Elem()
|
||||
fieldType = fieldType.Elem()
|
||||
}
|
||||
|
||||
// 结构数组
|
||||
if fieldType.Kind() == reflect.Slice {
|
||||
for i := 0; i < fieldValue.Len(); i++ {
|
||||
subValue := fieldValue.Index(i)
|
||||
subType := subValue.Type()
|
||||
if subType.Kind() == reflect.Ptr {
|
||||
subType = subType.Elem()
|
||||
subValue = subValue.Elem()
|
||||
}
|
||||
|
||||
if subType.Kind() == reflect.Struct {
|
||||
ShowFieldValue(subValue, tag+"["+strconv.Itoa(i)+"]")
|
||||
} else {
|
||||
fmt.Println(tag+" =", realValue.Interface())
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if fieldValue.Len() == 0 {
|
||||
fmt.Println(tag + " = empty")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 判断是否是结构体
|
||||
if fieldType.Kind() == reflect.Struct {
|
||||
ShowStructValue(fieldValue.Interface(), tag)
|
||||
return
|
||||
}
|
||||
|
||||
// 字符串
|
||||
if fieldType.Kind() == reflect.String {
|
||||
if fieldValue.Kind() == reflect.Ptr {
|
||||
if fieldValue.IsNil() {
|
||||
fmt.Println(tag + " = nil")
|
||||
} else {
|
||||
fmt.Println(tag+" =", realValue.Interface())
|
||||
}
|
||||
} else {
|
||||
if fieldValue.Len() > 0 {
|
||||
fmt.Println(tag+" =", realValue)
|
||||
} else {
|
||||
fmt.Println(tag + " = nil")
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if !realValue.IsValid() {
|
||||
fmt.Println(tag + " = nil")
|
||||
} else {
|
||||
fmt.Println(tag+" =", realValue)
|
||||
}
|
||||
}
|
||||
|
||||
// PrintBytes PrintBytes
|
||||
func PrintBytes(data []byte, tag string) {
|
||||
fmt.Println("-----------", tag, "------------")
|
||||
length := len(data)
|
||||
for i := 0; i < length; i++ {
|
||||
fmt.Print(data[i], ", ")
|
||||
if i%16 == 0 && i > 0 {
|
||||
fmt.Println()
|
||||
}
|
||||
}
|
||||
fmt.Printf("\n")
|
||||
}
|
||||
|
||||
// PrintBytesHex PrintBytes
|
||||
func PrintBytesHex(data []byte, tag string) {
|
||||
length := len(data)
|
||||
fmt.Println("-----------", tag, "-", length, "------------")
|
||||
for i := 0; i < length; i++ {
|
||||
if i%16 == 0 && i > 0 {
|
||||
fmt.Println()
|
||||
}
|
||||
fmt.Printf("0x%02x, ", data[i])
|
||||
}
|
||||
fmt.Printf("\n")
|
||||
}
|
||||
Reference in New Issue
Block a user