In the documentation for [effective Go](https://golang.org/doc/effective_go.html#pointers_vs_values) it states:

> 
> As we saw with ByteSize, methods can be defined for any named type
>  (except a pointer ...
> 
> 
> 

```
type ByteSlice []byte
func (slice ByteSlice) Append(data []byte) []byte {
  // Body exactly the same as above
}

```

It then goes on to provide an example with a pointer as receiver:

```
func (p *ByteSlice) Append(data []byte) {
  slice := *p
  // Body as above, without the return.
  *p = slice
}

```

Doesn't that contradict ? Or does it mean that this isn't valid:

```
type ByteSlice []byte
type Pb *ByteSlice
func (p Pb) Append(data []byte) []byte {
} 

```

Though it looks just like a typedef!