2014-11-24 16 views
2

我需要一個數據結構,除了自定義字段之外還接受名稱/值對。我怎樣才能定義一個這樣的結構?如何在結構上定義可變參數字段?去

例如

type mybasket struct { 
    Coupons string 
    Amount int 
    ....... // string or int 
} 
+0

請看看轉到FAQ:聯盟和變異類型有討論。 – Volker 2014-11-24 06:01:00

+1

另外,'map [string] interface {}'是另一種通用的「包裝物」類型。你需要一個地圖查找和一個[type assertion](https://golang.org/ref/spec#Type_assertions)來解壓縮內容。如果你能弄清楚如何避免在這裏做一些動態的事情,這可能是一件好事,因爲在編譯期間提前聲明字段和類型往往會遇到更多的錯誤(更容易調試),並且可以讓你更快地運行代碼。 – twotwotwo 2014-11-24 06:43:20

+0

這個問題很不清楚。 「接受」名稱/值對是什麼意思?或「自定義」字段? 「string or int」是指你要求一個表示字符串還是int的數據類型?你能更具體地瞭解你想要完成的事情嗎? – 2014-11-24 08:31:51

回答

4

我建議你定義的類型settergetter方法,和值存儲在結構中分得一杯羹。

例如:

package main 

import "fmt" 

type kv struct { 
    k, v string 
} 

type mybasket struct { 
    Coupons string 
    Amount int 
    Contents []kv 
} 

func (t *mybasket) SetContents(c ...kv) { 
    t.Contents = c 
    return 
} 

func (t *mybasket) GetContents() []kv { 
    return t.Contents 
} 

func main() { 
    T := &mybasket{"couponlist", 100, []kv{}} // New Basket 
    kvs := []kv{{"foo", "bar"}, {"baz", "bat"}} // Contents 
    T.SetContents(kvs...) // Set Contents 
    fmt.Printf("%v", T.GetContents()) // Get Contents 
} 

打印:

[{foo bar} {baz bat}] 

Playground

相關問題