Go 结构属性的动态标识符
用户有多个id字段-每种类型的社交登录一个: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
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代替。好的-你能告诉我你在回答中的想法吗?一个好的,干净的解决方案-非常感谢!