基本上,遍历 a 唯一的字段值方法(据我所知)struct是这样的: * K: b D, P! t$ e$ M
4 G. N+ j T. N( ]6 q% y
type Example struct a_number uint32 a_string string}//...r := &Example{(2 我想知道是否有更好、更通用的实现方法[]interface{}{ r.a_number,r.a_string,},所以我不需要单独列出每个参数,或者有更好的方法来循环遍历结构吗? + L# P; j8 R7 j' h @. E
我试图翻阅reflect但是我撞到了墙,因为我不知道怎么拿回来reflect.ValueOf(*r).Field(0). 2 m v) u8 S- y: D
谢谢! , N5 Y3 N T8 Q2 ~* ~8 I
' G5 ~% V* E4 W& q9 x
解决方案: % Z& c i, X6 e2 m
reflect.Value 使用检索字段后,Field(i)可以调用Interface(). 接口值代表字段值。5 e; H2 y. Z* M$ m: \
没有函数可以将字段值转换为特定类型,因为你可能知道,go 中没有泛型。因此,与签名没有任何功能。GetValue() T 与T字段的类型(当然,这取决于字段)。 % ^! M. F/ H0 s; _7 Z7 c2 W
您可以在 go 中最接近的是GetValue() interface{},这就是所在reflect.Value.Interface() 提供。- q5 {! v( s& l
如何使用反射 ( )play ) 在结构中获得每个导出字段的值:[code]import "fmt" "reflect")func main() x := struct{Foo string; Bar int }{"foo",2} v := reflect.ValueOf(x) values := make([]interface{},v.NumField() for i := 0; i < v.NumField(); i values = v.Field(i).Interface() fmt.Println(values)} " S$ |4 e* x& ], o, p! F