Go语言 如何找出哪些类型实现了哪些接口

holgip5t  于 2023-03-10  发布在  Go
关注(0)|答案(3)|浏览(223)

示例:
在包io中,类型ByteReader定义了一个 Package 方法ReadByte() (c byte, err error)的接口。

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

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

yvt65v4c

yvt65v4c1#

主要是凭经验。总之,举个例子:

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$

另外,golang.org站点也有一个case sensitive search capability

bvuwiixz

bvuwiixz2#

现在有比简单搜索更好的方法来实现这一点。
Go Oracle有一个implements查询,它将显示哪些类型实现了特定的接口,以及特定类型实现了哪些接口。
此外,这里有一个工具,声称提供相同的功能:https://github.com/dominikh/implements .

2020年更新:官方的Go语言服务器gopls也支持这个查询:

➜ gopls implementation -h
    display selected identifier's implementation
    
    Usage: implementation [flags] <position>
    
    Example:
    
      $ # 1-indexed location (:line:column or :#offset) of the target identifier
      $ gopls implementation helper/helper.go:8:6
      $ gopls implementation helper/helper.go:#53
nszi6y05

nszi6y053#

使用源代码浏览器:https://cs.opensource.google/go/go/ .
在文档(例如https://pkg.go.dev/io#ByteReader)中单击类型名称:
1.

它会带你到源代码:
1.

现在,再次单击方法名称,将打开底部的“参考”面板:
1.

在我看来,这不是超级方便,但比cli工具更好。这类信息应该可以直接从文档中获得!

相关问题