为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
青春有我 2021-11-22 18:17:20
我有一个类似的对象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.html
godoc有静态分析功能。它可以显示您的类型实现关系。

例如,您可以godoc -http=:8081 -analysis=type使用类型分析运行并获取所有包文档。


查看完整回答
反对 回复 2021-11-22
?
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


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信