我有一个结构体和该结构体的实例:
type Obj struct {
ssid string
code string
mit string
// and other props (23)
}
var ValidObject = Obj {
ssid: "AK93-KADJ9-92J76",
code: "SKO-120O"
mit: "MSLA-923-OKSW"
}
我想创建一个切片结构(Obj
),该切片将包含ValidObject
,只更改了某些字段。我认为最好的解释方法是使用伪代码,所以这里是(使用JS的散布运算符)):
var slc = []Obj{
{
...ValidObject,
code: "Other value",
},
{
...ValidObject,
mit: "Other value"
}
}
答案 0 :(得分:3)
创建一个使用Object
,更改其code
并返回新的Object
的辅助函数:
func withCode(obj Obj, code string) Obj {
obj.code = code
return obj
}
请注意,withCode
采用非指针值,因此您传递的Object
不会被修改,只会修改本地副本。
使用此任务,您将:
var slc = []Obj{
withCode(ValidObject, "Other value"),
withCode(ValidObject, "Yet another value"),
}
fmt.Println(slc)
输出(在Go Playground上尝试):
[{AK93-KADJ9-92J76 Other value MSLA-923-OKSW}
{AK93-KADJ9-92J76 Yet another value MSLA-923-OKSW}]
该帮助器withCode
甚至可以是方法(不是函数)。
请注意,如果您需要多个字段的变体,最好将它们添加为方法,以便可以链接调用。
例如:
func (o Obj) withCode(code string) Obj {
o.code = code
return o
}
func (o Obj) withSsid(ssid string) Obj {
o.ssid = ssid
return o
}
func (o Obj) withMit(mit string) Obj {
o.mit = mit
return o
}
然后使用它:
var slc = []Obj{
ValidObject.withCode("code2").withSsid("ssid2"),
ValidObject.withMit("mit2").withSsid("ssid3"),
}
fmt.Println(slc)
输出(在Go Playground上尝试):
[{ssid2 code2 MSLA-923-OKSW} {ssid3 SKO-120O mit2}]
答案 1 :(得分:-1)
全局创建一个切片结构var objCollector = []obj{}
,将数据读取到已定义的结构中,并将对象append
读取到我们创建的结构切片中。
type Obj struct {
ssid string
code string
mit string
}
var objCollector = []obj{}
func main() {
var ValidObject = Obj{
ssid: "AK93-KADJ9-92J76",
code: "SKO-120O",
mit: "MSLA-923-OKSW",
}
append(objectCollector, ValidObject)
}