簡體   English   中英

如何實現_()方法?

[英]How to implement _() method?

我發現其中有一個名為_的方法的接口。 我嘗試實現它,但是不起作用:

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 }

$ go run a.go 
./a.go:4: cannot use t (type T) as type I in function argument:
  T does not implement I (missing _ method)

我也嘗試添加重載的方法_(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 }

$ go run a.go 
# command-line-arguments
./a.go:12: internal compiler error: sigcmp vs sortinter _ _

為什么? _方法的目的是什么? 我認為這可能是阻止人們實現接口的方法(例如Java中的私有接口)?

_是“空白標識符”( https://golang.org/ref/spec#Blank_identifier ),並且具有特殊的規則。 特別:

空白標識符可以像聲明中的任何其他標識符一樣使用,但是它不會引入綁定,因此不會被聲明。

另請注意,關於接口( https://golang.org/ref/spec#Interface_types )的部分說:

每個方法必須具有唯一的非空白名稱

因此該接口甚至無效。 編譯器顯然接受它的事實是一個錯誤。 無論哪個程序包聲明它實際上都不應該這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM