为了账号安全,请及时绑定邮箱和手机立即绑定

从结构映射调用结构

从结构映射调用结构

Go
慕莱坞森 2021-08-30 16:38:41
我正在尝试类似以下示例的操作。我作为 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
提交
取消
意见反馈 帮助中心 APP下载
官方微信