该代码:
type ByteSlice []byte
func (p *ByteSlice) Append(data []byte) {
slice := *p
slice = append(slice, data...)
*p = slice
}
func main() {
x := ByteSlice{1, 2, 3}
y := []byte{4, 5}
x.Append(y)
fmt.Println(x)
}
Run Code Online (Sandbox Code Playgroud)
好吧,我理解为什么以及指针如何工作,但我总是想知道为什么我们使用*operator将指针传递给函数.
*ptr 是顺从ptr并返回指针ptr中保存的值.&var 返回变量var的地址.为什么我们不使用&ByteSlice指针传递函数?
我很迷惑.这个函数不是通过指针吗?
根据Go规范(http://golang.org/ref/spec#Pointer_types)
PointerType ="*"BaseType.
BaseType =类型.
这也让我感到困惑.为什么我们使用star(*)运算符来获取变量和解引用指针的指针?看起来我们不会&在C和Go中使用这种情况......
ANi*_*sus 13
*in func (p *ByteSlice) Append(data []byte) {只是声明p类型*ByteSlice.
指针的传递发生在这里:
x.Append(y)
Run Code Online (Sandbox Code Playgroud)
正如规范所说(我的重点):
如果方法集x(类型)x包含m并且参数列表可以分配给m的参数列表,则方法调用xm()有效.如果x是可寻址的并且&x的方法集包含m,则xm()是(&x).m()的简写:
在你的情况下,x.Append(y)是一个简写(&x).Append(y).你有你的&-sign.
| 归档时间: |
|
| 查看次数: |
4951 次 |
| 最近记录: |