Golang, Go : why pointer use star operator instead of &

c, go, pointers

Solution

The * in `func (p *ByteSlice) Append(data []byte) {` is simply declaring that `p` is of type `*ByteSlice`.

The passing of a pointer takes place here:

x.Append(y)

As the Specification says (my emphasis):

A method call x.m() is valid if the method set of (the type of) x contains m and the argument list can be assigned to the parameter list of m. If x is addressable and &x's method set contains m, x.m() is shorthand for (&x).m():

In your case, `x.Append(y)` is a shorthand for `(&x).Append(y)`. There you have your &-sign.

Problem

The code: ``` 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) } ``` Ok, I understand why and how pointer works, but I've always wondered why we use `*` operator to pass pointer to function. - `*ptr` is to deference the ptr and return the value saved in the pointer ptr. - `&var` returns the address of the variable var. Why we do not use `&ByteSlice` to pass pointer to function? I am confused. Isn't this function passing pointer? According to Go spec (http://golang.org/ref/spec#Pointer_types) PointerType = "*" BaseType . BaseType = Type . This also confuses me. Why we use star(`*`) operator both to get the pointer of variable and dereference pointer? Looks like we don't use `&` for this case both in C and Go...

Original source

Related problems