为了账号安全,请及时绑定邮箱和手机立即绑定

指针接收器方法中的内置函数“追加”

指针接收器方法中的内置函数“追加”

Go
慕妹3242003 2021-10-25 18:21:37
有两种类型: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上试试。


查看完整回答
反对 回复 2021-10-25
?
达令说

TA贡献1821条经验 获得超6个赞

不要这样做。不要太聪明。只需使用带有切片的结构作为成员。它实际上增加了零开销,以后需要查看您的代码的任何人(包括您)都会感激不尽。


查看完整回答
反对 回复 2021-10-25
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信