Types 如何在结构上定义可变字段?去

Types 如何在结构上定义可变字段?去,types,go,Types,Go,我需要一个数据结构,除了接受自定义字段外,还接受名称/值对。我如何定义这样的结构 e、 g 我建议在类型上定义setter和getter方法,并将值存储在结构的切片中 例如: package main import "fmt" type kv struct { k, v string } type mybasket struct { Coupons string Amount int Contents []kv } func (t *mybasket

我需要一个数据结构,除了接受自定义字段外,还接受名称/值对。我如何定义这样的结构

e、 g


我建议在类型上定义
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}]

请看一看Go常见问题解答:这里讨论了联合和变体类型。此外,
map[string]interface{}
是另一种通用的“bag of stuff”类型。您将需要一个地图查找和一个文件包来解压缩内容。如果您能找出如何避免在此处执行动态操作,这可能是一件好事,因为提前声明字段和类型通常会在编译过程中捕获更多错误(更容易调试),并可以让您更快地运行代码。这个问题非常不清楚。“接受”名称/值对是什么意思?还是“自定义”字段?“string或int”是否意味着您需要表示字符串或int的数据类型?你能更具体地说明你想要完成什么吗?@AmitKumarGupta没错。除优惠券和金额外,结构应“接受”int或string值。请注意,字段的数量应为可变/无限制。
[{foo bar} {baz bat}]