如何找出哪些类型在Golang中实现哪个接口?

top*_*kip 18 go

例:

在包中io,类型ByteReader定义了一个包装方法的接口ReadByte() (c byte, err error).

找出 标准库中哪些类型(即golang.org/pkg中列出的)满足此接口的最简单方法是什么?

这只是经验问题还是有任何其他帮助?

zzz*_*zzz 18

主要是经验.无论如何,例如:

jnml@fsc-r630:~/go/src/pkg$ egrep -nr '^func (.*) ReadByte\(' *
bufio/bufio.go:165:func (b *Reader) ReadByte() (c byte, err error) {
bytes/reader.go:59:func (r *Reader) ReadByte() (b byte, err error) {
bytes/buffer.go:289:func (b *Buffer) ReadByte() (c byte, err error) {
encoding/xml/xml_test.go:234:func (d *downCaser) ReadByte() (c byte, err error) {
strings/reader.go:58:func (r *Reader) ReadByte() (b byte, err error) {
jnml@fsc-r630:~/go/src/pkg$ 
Run Code Online (Sandbox Code Playgroud)

此外,golang.org网站还具有区分大小写的搜索功能.


zmb*_*zmb 9

现在有更好的方法来做到这一点,而不仅仅是搜索.

Go Oracle有一个实现查询,它将显示哪些类型实现了特定的接口,以及特定类型实现的接口.

此外,这是一个声称提供相同功能的工具:https://github.com/dominikh/implements.

  • Go oracle 被大师取代 - https://docs.google.com/document/d/1_Y9xCEMj5S-7rv2ooHpZNH15JgRT5iM742gJkw5LtmQ/ 和 https://godoc.org/golang.org/x/tools/cmd/guru (2认同)