【发布时间】:2017-01-20 17:11:59
【问题描述】:
情况:
我了解了指针接收器和值接收器。据我了解:如果要修改对象本身,则需要使用指针接收器。我在go documentation 中阅读了有关接口的更多信息,并发现了这段代码:
type Sequence []int
// Methods required by sort.Interface.
func (s Sequence) Len() int {
return len(s)
}
func (s Sequence) Less(i, j int) bool {
return s[i] < s[j]
}
func (s Sequence) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
Less和Len方法正在使用 值接收器,这是有道理的,因为它们正在返回数据而不是修改Sequence状态。但在
Swap示例中,我很好奇为什么它看起来正在尝试修改其状态时仍在使用值接收器。
问题:
这是一个错误,还是我对值/指针接收器的理解在某些方面存在缺陷?
【问题讨论】:
-
Sequence是一个引用类型,因此Swap函数将交换切片的基础值。一篇关于切片的好文章可以看这里:blog.golang.org/go-slices-usage-and-internals -
你没有修改
s。您正在修改s[i]和s[j]。
标签: pointers go go-interface