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