【发布时间】:2019-12-19 07:30:00
【问题描述】:
我想遍历结构中的字段并提示字符串字段的字符串值,递归地为指向结构的字段执行此操作。
目前这是我尝试过的,但尝试在指针的字符串字段中设置此值时出现错误。
package main
import (
"fmt"
"reflect"
)
type Table struct {
PK *Field
}
type Field struct {
Name string
}
func main() {
PopulateStruct(&Table{})
}
func PopulateStruct(a interface{}) interface {} {
typeOf := reflect.TypeOf(a)
valueOf := reflect.ValueOf(a)
for i := 0; i < typeOf.Elem().NumField(); i++ {
switch typeOf.Elem().Field(i).Type.Kind() {
case reflect.String:
fmt.Print(typeOf.Elem().Field(i).Name)
var s string
fmt.Scanf("%s", &s)
valueOf.Elem().Field(i).SetString(s)
case reflect.Ptr:
ptr := reflect.New(valueOf.Elem().Field(i).Type())
PopulateStruct(ptr.Elem().Interface())
valueOf.Elem().Field(i).Set(ptr)
}
}
}
期望返回值包含一个带有指针字符串字段集的初始化结构。
设置指针的字符串字段时出错。
恐慌:反映:在零值上调用 reflect.Value.Field
【问题讨论】:
-
指针是
nil吗?如果是这样,您需要在遍历之前使用一个值对其进行初始化。 -
更新问题以显示您的测试用例。
标签: go reflection