有两种类型:type Headers []HeaderItemtype HeaderItem struct { // This one doesn't really matter. Could be any other type Name string Value string}我想添加一个以切片作为接收器的函数。我怎么能做这样的事情(伪代码):func (h *Headers) AddHeaderItem(item HeaderItem) { h = &(append( *h, item ))}编译器抱怨它,所以这不起作用。我试过:func (h Headers) AddHeaderItem(item HeaderItem) { h = append( h, item )}这实际上编译但没有做我想要的:当稍后range遍历项目时,我得到一个空结果。
2 回答
墨色风雨
TA贡献1853条经验 获得超6个赞
AddHeaderItem()方法内部h是一个指针。您不想更改指针而是要更改指向的值:
func (h *Headers) AddHeaderItem(item HeaderItem) {
*h = append(*h, item)
}
测试它:
h := Headers{}
fmt.Println(h)
h.AddHeaderItem(HeaderItem{"myname1", "myvalue1"})
fmt.Println(h)
h.AddHeaderItem(HeaderItem{"myname2", "myvalue2"})
fmt.Println(h)
输出:
[]
[{myname1 myvalue1}]
[{myname1 myvalue1} {myname2 myvalue2}]
在Go Playground上试试。
- 2 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消