2016-01-06 27 views
0

用戶動態標識有多個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分配給正確的prope RTY?我試過了:

if provider == "github" { 
    field := "Github_id" 
    user.field = id //and also user[field] = id 
} 

但是目前爲止沒有成功。

附註

我的用戶可以擁有多個社交登錄帳戶,所以我不能只用單一的social_id屬性作爲解決這個問題。

+0

我建議不這樣做;改爲使用[map](https://golang.org/ref/spec#Map_types)。 –

+0

好的 - 你能給我一個你在回答中思考的想法嗎? – tommyd456

回答

2

在這種情況下,爲了填充正確的字段而在結構上執行反射看起來像是矯枉過正。

我建議在User結構中有一個地圖字段來存放所有的社交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 
+0

一個不錯的,乾淨的解決方案 - 非常感謝! – tommyd456