结构体属性的动态标识符

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


type User struct {

    Name         string

    Github_id    string

    Facebook_id  string

    Google_id    string

}

我有存储providerand 的变量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

}

但到目前为止还没有成功。


附加说明


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


莫回无
浏览 170回答 1
1回答

红颜莎娜

在这种情况下,对结构执行反射以填充正确的字段似乎有点过头了。我建议在你的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 tooid := "12345"user := NewUser()user.Name = "Bob"user.IDs[provider] = id
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go