首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于接口“所有已知实现”的文档

关于接口“所有已知实现”的文档
EN

Stack Overflow用户
提问于 2015-08-01 06:53:32
回答 3查看 1.5K关注 0票数 12

学习Go几个月后,我发现os.File通过实现Read(b []byte) (n int, err error)函数实现了Read(b []byte) (n int, err error)接口。这允许我使用缓冲的读取器通过执行以下操作来读取文件:

代码语言:javascript
运行
复制
f, err := os.Open("myfile.txt")
bufReader := bufio.NewReader(f)

除非我错过了,否则界面上的Go文档中似乎没有“所有已知的实现类”,就像Java接口文档中的那些类一样。

是否有任何方法来识别Go中实现接口的类型?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-01 07:14:52

您可以使用godoc命令的静态分析工具找到您想要的信息和更多信息。在命令行中运行以下命令:godoc -http=":8080" -analysis="type"。使用文档,您可以了解实现接口的类型和为类型设置的方法。

还有一个指针分析,允许您找到不同类型的调用者和调用者。频道发送<

您还可以在http://golang.org/lib/godoc/analysis/help.html上阅读更多关于godoc工具所做的静态分析的内容。

票数 11
EN

Stack Overflow用户

发布于 2015-08-01 07:13:58

https://github.com/dominikh/implements可以这样做:

implements是一个命令行工具,它将告诉您哪些类型实现了哪些接口,哪些接口是由哪种类型实现的。

例如:

代码语言:javascript
运行
复制
~ implements -types=crypto/cipher
crypto/cipher.StreamReader implements...
        io.Reader
*crypto/cipher.StreamReader implements...
        io.Reader
crypto/cipher.StreamWriter implements...
        io.Closer
        io.WriteCloser
        io.Writer
*crypto/cipher.StreamWriter implements...
        io.Closer
        io.WriteCloser
        io.Writer
票数 4
EN

Stack Overflow用户

发布于 2015-08-06 04:32:20

对于所有的病毒瘾君子来说,维姆-去支持使用:GoImplements:GoCallees:GoChannelPeers:GoReferrers等oracle命令进行预先的代码分析。

例如,如果我有一个Calculator接口和实现,如下所示:

代码语言:javascript
运行
复制
type Arithmetic interface{
  add(float64, float64) float64 
}

type Calculator struct{}

func (c *calculator) add(o1, o2 float64) float64 {
  // ... stuff
}

然后在vim中运行:GoImplements并在type Arithmetic interface上使用游标将产生如下结果:

代码语言:javascript
运行
复制
calculator.go|8 col 6| interface type Arithmetic
calculator.go|3 col 6| is implemented by pointer type *calculator

现在,如果我将光标移到type Calculator struct{}行并运行:GoImplements,我将得到如下内容:

代码语言:javascript
运行
复制
calculator.go|3 col 6| pointer type *calculator
calculator.go|8 col 6| implements Arithmetic

注意:如果您有“未知命令”错误,请在重试之前先执行:GoInstallBinaries

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31759184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档