项目中,在使用sdk调用链码的时候,传参使用的是[]struct类型,要把n个结构体中的n个字段都手动转成[]string是个体力活,因此写了一个公共方法。
package main
import (
"fmt"
"reflect"
"strconv"
)
type Student struct {
Name string
Age int
Sex int64
Address string
}
func main() {
s := Student{
Name: "小明",
Age: 20,
Address: "上海市",
Sex: 1,
}
st := struct2strings(s)
fmt.Println(len(st), st)
}
func struct2strings(i interface{}) []string {
value := reflect.ValueOf(i)
//fmt.Println(value.NumField())
var res = make([]string, 0, value.NumField())
for j := 0; j < value.NumField(); j++ {
var v string
switch value.Field(j).Kind() {
case reflect.Int:
v = strconv.FormatInt(value.Field(j).Int(), 10)
case reflect.Int64:
v = strconv.FormatInt(value.Field(j).Int(), 10)
case reflect.String:
v = value.Field(j).String()
}
res = append(res, v)
}
return res
}
由于项目中只使用到了Int,Int64,string三种类型,因此没有把别的类型兼容进去。
转载请注明来源