golang通过反射拼接一个结构体所有字段
需求
- 将一个结构体所有字段以"|"连接拼接成字符串
golang 不同类型拼接成string使用Sprintf比较麻烦,如果一个结构体有上百个字段,一个一个拼接有点要人命,可以通过反射修改所有字段为string再拼接起来.
实现demo
package main
import (
"fmt"
"reflect"
"strings"
)
type Student struct {
Name string `json:"name"`
Age int `json:"age"`
Grade int `json:"grade"`
}
func main () {
student := Student{
Name: "json",
Age: 18,
Grade: 9,
}
t := reflect.TypeOf( student)
if t.Kind() != reflect.Struct {
fmt.Println("Check type error not Struct")
return
}
v := reflect.ValueOf(student)
str := ""
for i := 0; i < t.NumField(); i++ {
value := v.Field(i).Interface()
str += fmt.Sprintf("%v", value)
str += "|"
}
if strings.HasSuffix(str,"|") {
str = str[0 : len(str)-1]
}
fmt.Println(str)
}
输出结果
json|18|9