Types 如何实现()方法?
我发现一个接口中有一个名为Types 如何实现()方法?,types,interface,go,overloading,Types,Interface,Go,Overloading,我发现一个接口中有一个名为\uuu的方法。我尝试过实现它,但它不起作用: package main func main() {} func ft(t T) { fi(t) } func fi(I) {} type I interface { _() int } type T struct {} func (T) _() int { return 0 } func (T) _(int) int { return 0 } 我还尝试添加重载方法(int),但这也不起作用: pack
\uuu
的方法。我尝试过实现它,但它不起作用:
package main
func main() {}
func ft(t T) { fi(t) }
func fi(I) {}
type I interface {
_() int
}
type T struct {}
func (T) _() int { return 0 }
func (T) _(int) int { return 0 }
我还尝试添加重载方法(int)
,但这也不起作用:
package main
func main() {}
type I interface {
_() int
_(int) int
}
type T struct {}
func (T) _() int { return 0 }
func (T) _(int) int { return 0 }
为什么??此方法的目的是什么?我认为这可能是一种阻止人们实现接口(如Java中的私有接口)的方法?\u
是“空白标识符”(blank identifier)并且有特殊的规则。具体而言:
空白标识符可以像声明中的任何其他标识符一样使用,但它不会引入绑定,因此不会被声明
另请注意,关于接口()的部分说:
每个方法必须具有唯一的非空名称
因此,该接口甚至不是有效的go;编译器显然接受这一事实是一个bug。无论哪个包声明它真的不应该这样做。根据我对规范的阅读,我已经提交了一份错误报告,看看开发人员说什么会很有趣:。。。关闭为“工作已结束”
package main
func main() {}
type I interface {
_() int
_(int) int
}
type T struct {}
func (T) _() int { return 0 }
func (T) _(int) int { return 0 }
$ go run a.go
# command-line-arguments
./a.go:12: internal compiler error: sigcmp vs sortinter _ _