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

结构体属性的动态标识符

结构体属性的动态标识符

Go
莫回无 2021-12-06 19:36:27
用户有许多 id 字段 - 每种类型的社交登录都有一个:type User struct {    Name         string    Github_id    string    Facebook_id  string    Google_id    string}我有存储providerand 的变量id:provider := "github" //could be facebook or google tooid := "12345"和一个用户:var user Useruser.Name = "Bob"但是如何将 id 分配给正确的属性?我试过了:if provider == "github" {    field := "Github_id"    user.field = id //and also user[field] = id}但到目前为止还没有成功。附加说明我的用户可能有多个社交登录帐户,因此我不能仅使用单个social_id属性作为此问题的解决方案。
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

在这种情况下,对结构执行反射以填充正确的字段似乎有点过头了。


我建议在你的User结构中有一个 map 字段来保存所有的社交 ID。例子:


type User struct {

    Name string

    IDs  map[string]string

}


func NewUser() *User {

   return &User{

       IDs: make(map[string]string),

   }

}

用法:


provider := "github" // could be facebook or google too

id := "12345"


user := NewUser()

user.Name = "Bob"

user.IDs[provider] = id


查看完整回答
反对 回复 2021-12-06
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信