查找对象支持的所有导入接口

我有一个类似的对象os.Stdout,我想知道它是否支持io.WriteCloser我的平台。我可以获得我的对象的类型,但它没有告诉我任何关于接口的信息。


package main


import ("fmt"; "reflect"; "os")


func main() {

    fmt.Println(reflect.TypeOf(os.Stdout))

}

此代码打印*os.File到控制台。


如果os.File匹配io.WriteCloser方法,我可以手动查找,但我很想获得此对象支持的所有接口


青春有我
浏览 150回答 2
2回答

幕布斯6054654

这不是该问题的确切答案,因为它不适用于运行时。无论如何我认为它可能有用看看https://golang.org/lib/godoc/analysis/help.htmlgodoc有静态分析功能。它可以显示您的类型实现关系。例如,您可以godoc -http=:8081 -analysis=type使用类型分析运行并获取所有包文档。

largeQ

要扩展@Volker 关于类型断言的评论,它看起来像这样:_, implements := interface{}(os.Stdout).(io.Reader)它转换os.Stdout为一个interface{}类型,然后尝试断言它是一个io.Reader. 类型断言返回两个值;第一个是断言值(如果断言失败则为零),第二个是指示断言是否成功的布尔值。如果您省略捕获第二个返回值,那么失败的断言将导致恐慌。作为替代,可能更通用或运行时要求类型包可能具有一些基于反射的有用功能:https : //godoc.org/golang.org/x/tools/go/types
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go