比如:
type A struct {
a1 int
}
type B struct {
A
b1 int
b2 float32
}
type C struct {
B
c string
}
遍歷C結構中所有欄位,輸出欄位名稱,型別,數值
用反射對于組合不知道怎么辦
uj5u.com熱心網友回復:
for examplefunc main() {
c := C{}
PrintAll(c)
}
func PrintAll(obj interface{}) {
e := reflect.ValueOf(obj)
var v interface{}
for i := 0; i < e.NumField(); i++ {
name := e.Type().Field(i).Name
kind := e.Field(i).Type().Kind()
switch kind {
case reflect.Struct:
v = e.Field(i).Interface()
PrintAll(v) //如果是結構體則遞回
case reflect.String:
v = e.Field(i).String()
case reflect.Int, reflect.Int16, reflect.Int64, reflect.Int8:
v = e.Field(i).Int()
case reflect.Float32, reflect.Float64:
v = e.Field(i).Float()
default: //其他型別忽略,可以自行擴展
v = e.Field(i).String()
}
fmt.Printf("name=%v, type:=%v, value=https://bbs.csdn.net/topics/%v/n", name, kind, v)
}
}
uj5u.com熱心網友回復:
是C++,貌似沒有Field函式轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/167090.html
標籤:go語言
上一篇:新手
