Go 结构属性的动态标识符

Go 结构属性的动态标识符,go,Go,用户有多个id字段-每种类型的社交登录一个: type User struct { Name string Github_id string Facebook_id string Google_id string } 我有存储提供程序和id的变量: provider := "github" //could be facebook or google too id := "12345" 以及用户: var user User use

用户有多个id字段-每种类型的社交登录一个:

type User struct {
    Name         string
    Github_id    string
    Facebook_id  string
    Google_id    string
}
我有存储
提供程序
id
的变量:

provider := "github" //could be facebook or google too
id := "12345"
以及用户:

var user User
user.Name = "Bob"
但是如何将id分配给正确的属性呢?我试过:

if provider == "github" {
    field := "Github_id"
    user.field = id //and also user[field] = id
}
但到目前为止还没有成功

附加说明


我的用户可能有多个社交登录帐户,因此我不能仅使用一个
社交id
属性作为此问题的解决方案。

在结构上执行反射以填充正确的字段,在这种情况下,这似乎是过火了

我建议在你的
User
struct中有一个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

我建议不要这样做;用a代替。好的-你能告诉我你在回答中的想法吗?一个好的,干净的解决方案-非常感谢!