2
我需要一個數據結構,除了自定義字段之外還接受名稱/值對。我怎樣才能定義一個這樣的結構?如何在結構上定義可變參數字段?去
例如
type mybasket struct {
Coupons string
Amount int
....... // string or int
}
我需要一個數據結構,除了自定義字段之外還接受名稱/值對。我怎樣才能定義一個這樣的結構?如何在結構上定義可變參數字段?去
例如
type mybasket struct {
Coupons string
Amount int
....... // string or int
}
我建議你定義的類型setter
和getter
方法,和值存儲在結構中分得一杯羹。
例如:
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}]
請看看轉到FAQ:聯盟和變異類型有討論。 – Volker 2014-11-24 06:01:00
另外,'map [string] interface {}'是另一種通用的「包裝物」類型。你需要一個地圖查找和一個[type assertion](https://golang.org/ref/spec#Type_assertions)來解壓縮內容。如果你能弄清楚如何避免在這裏做一些動態的事情,這可能是一件好事,因爲在編譯期間提前聲明字段和類型往往會遇到更多的錯誤(更容易調試),並且可以讓你更快地運行代碼。 – twotwotwo 2014-11-24 06:43:20
這個問題很不清楚。 「接受」名稱/值對是什麼意思?或「自定義」字段? 「string or int」是指你要求一個表示字符串還是int的數據類型?你能更具體地瞭解你想要完成的事情嗎? – 2014-11-24 08:31:51