在有效的 Go文档中指出:
正如我们在 ByteSize 中看到的,可以为任何命名类型定义方法(指针除外......
type ByteSlice []byte
func (slice ByteSlice) Append(data []byte) []byte {
// Body exactly the same as above
}
Run Code Online (Sandbox Code Playgroud)
然后它继续提供一个以指针作为接收器的示例:
func (p *ByteSlice) Append(data []byte) {
slice := *p
// Body as above, without the return.
*p = slice
}
Run Code Online (Sandbox Code Playgroud)
这不矛盾吗?或者这是否意味着这是无效的:
type ByteSlice []byte
type Pb *ByteSlice
func (p Pb) Append(data []byte) []byte {
}
Run Code Online (Sandbox Code Playgroud)
虽然它看起来就像一个 typedef!
命名指针类型可能会导致歧义,如下所示:
type T int
func (t *T) Get() T {
return *t + 1
}
type P *T
func (p P) Get() T {
return *p + 2
}
func F() {
var v1 T
var v2 = &v1
var v3 P = &v1
fmt.Println(v1.Get(), v2.Get(), v3.Get())
}
Run Code Online (Sandbox Code Playgroud)
在最后一种情况下(尤其是v3根据当前规范),Get()应该调用哪个方法是不明确的。是的,没有理由不能定义方法解析,但对于已经有解决方案的语言来说,这是一个需要添加的又一个细节。
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |