我正在尝试类似以下示例的操作。我作为 PHP 开发人员的背景(我知道!)在这方面给我带来了困难。我已经阅读了反射法则和其他来源,但这超出了我的脑海。我使用的方法可能是错误的……希望有人能指出我正确的方向。以具体方式使用它是版本 01 或 02 或 03 来自外部参数,基于此,我需要获取适当的结构并用数据库值填充它。package V01type Struct1 struct{ Field1 string Field2 string}type Struct2 struct{ Field1 string Field2 string}package V02type Struct1 struct{ Field1 string Field2 string ExtraField1 string}type Struct2 struct{ Field1 string Field2 string ExtraField2 string ExtraField3 string}var VStructs = map[string]map[string]interface{}{ "01": map[string]interface{}{ "Struct1": V01.Struct1{}, "Struct2": V01.Struct2{}, }, "02": map[string]interface{}{ "Struct1": V02.Struct1{}, "Struct2": V02.Struct2{}, }, "03" : map[string]interface{}{ "Struct1": V01.Struct1{}, "Struct2": V02.Struct2{}, }, } // I get the struct fieldnames and so on. fmt.Printf("%+v\n", VStructs["01"]["Struct1"] ) // I cannot access any of the fields though because it is an interface fmt.Println( VStructs["01"]["Struct1"].Field1 ) // PANIC! // Type Switching is not working either since the version can be variable. s := VStructs["01"]["Struct1"].Field1 switch x := s.(type) { case reflect.Struct: // PANIC! reflect.Struct (type reflect.Kind) is not a type fmt.Println("I am an struct") default: fmt.Println("I am an no struct") }所以也许可以告诉我这样做的适当方式。或者也许是一个包装函数来返回正确的结构......此时没有线索。希望它很清楚,如果被要求会详细说明。
目前暂无任何回答
- 0 回答
- 0 关注
- 193 浏览
添加回答
举报
0/150
提交
取消