我有一个类似的对象os.Stdout,我想知道它是否支持io.WriteCloser我的平台。我可以获得我的对象的类型,但它没有告诉我任何关于接口的信息。package mainimport ("fmt"; "reflect"; "os")func main() { fmt.Println(reflect.TypeOf(os.Stdout))}此代码打印*os.File到控制台。如果os.File匹配io.WriteCloser方法,我可以手动查找,但我很想获得此对象支持的所有接口
2 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
这不是该问题的确切答案,因为它不适用于运行时。无论如何我认为它可能有用
看看https://golang.org/lib/godoc/analysis/help.htmlgodoc
有静态分析功能。它可以显示您的类型实现关系。
例如,您可以godoc -http=:8081 -analysis=type
使用类型分析运行并获取所有包文档。
largeQ
TA贡献2039条经验 获得超7个赞
要扩展@Volker 关于类型断言的评论,它看起来像这样:
_, implements := interface{}(os.Stdout).(io.Reader)
它转换os.Stdout
为一个interface{}
类型,然后尝试断言它是一个io.Reader
. 类型断言返回两个值;第一个是断言值(如果断言失败则为零),第二个是指示断言是否成功的布尔值。如果您省略捕获第二个返回值,那么失败的断言将导致恐慌。
作为替代,可能更通用或运行时要求类型包可能具有一些基于反射的有用功能:https : //godoc.org/golang.org/x/tools/go/types
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消