循环遍历 struct n a Go 的第 N 个字段一次
Loop through the Nth fields one time of struct n a Go
Iterate through the fields of a struct in Go
我已经阅读了上面的主题,现在我正在尝试通过一次处理多个项目来扩展它
package main
import (
"fmt"
"reflect"
)
type BaseStats struct {
value1 int
value2 byte
value3 int
value4 byte
}
func StatsCreate(stats BaseStats) {
v := reflect.ValueOf(stats)
val := make([]interface{}, v.NumField())
for i := 0; i< v.NumField(); i+=2 {
val[i+0] = v.Field(i+0).Interface().(int)
val[i+1] = v.Field(i+1).Interface().(byte)
fmt.Printf("%v %v", val[i+0], val[i+1])
}
}
func main() {
StatsCreate(BaseStats{20, '%', 400, '$'})
}
我之前遇到的错误:panic: reflect.Value.Interface: cannot return value obtained from unexported field or method
Go 要求您将要在包外使用的任何变量或函数的首字母设为首字母(又名 EXPORTED)。因为您正试图将变量传递给另一个包,在本例中为 reflect
包,但它们不可导出。作为最佳实践,所有结构字段名称都大写是很常见的。
大写-> 导出范例是我不喜欢该语言的少数几个方面之一,但事实就是如此。
Iterate through the fields of a struct in Go
我已经阅读了上面的主题,现在我正在尝试通过一次处理多个项目来扩展它
package main
import (
"fmt"
"reflect"
)
type BaseStats struct {
value1 int
value2 byte
value3 int
value4 byte
}
func StatsCreate(stats BaseStats) {
v := reflect.ValueOf(stats)
val := make([]interface{}, v.NumField())
for i := 0; i< v.NumField(); i+=2 {
val[i+0] = v.Field(i+0).Interface().(int)
val[i+1] = v.Field(i+1).Interface().(byte)
fmt.Printf("%v %v", val[i+0], val[i+1])
}
}
func main() {
StatsCreate(BaseStats{20, '%', 400, '$'})
}
我之前遇到的错误:panic: reflect.Value.Interface: cannot return value obtained from unexported field or method
Go 要求您将要在包外使用的任何变量或函数的首字母设为首字母(又名 EXPORTED)。因为您正试图将变量传递给另一个包,在本例中为 reflect
包,但它们不可导出。作为最佳实践,所有结构字段名称都大写是很常见的。
大写-> 导出范例是我不喜欢该语言的少数几个方面之一,但事实就是如此。