结构属性的动态标识符

时间:2016-01-06 15:25:32

标签: go

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

type User struct {
    Name         string
    Github_id    string
    Facebook_id  string
    Google_id    string
}

我有存储providerid的变量:

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属性来解决此问题。

1 个答案:

答案 0 :(得分:2)

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

我建议您在jsons.stream().map(Document::parse).forEach(collection::insertOne); 结构中使用地图字段来保存所有社交ID。例如:

collection.insertMany(
        jsons.stream().map(Document::parse).collect(Collectors.toList())
); 

用法:

User