前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >转--以io.Writer为例看go中的interface{}

转--以io.Writer为例看go中的interface{}

作者头像
李海彬
发布2018-03-20 13:33:04
7410
发布2018-03-20 13:33:04
举报
文章被收录于专栏:Golang语言社区

可见interface是go中很重要的一个特性。

在网上有人问:Go语言中接口到底有啥好处,能否举例说明?于是,我考虑以io.Writer接口为例谈谈interface{}

一、io.Writer接口

在go标准库io包中定义了Writer接口:

代码语言:javascript
复制
<span id="3_nwp" style="width: auto; height: auto; float: none;"><a id="3_nwl" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=19&is_app=0&jk=6f7397cade0a19af&k=type&k0=type&kdi0=0&luki=3&mcpm=0&n=10&p=baidu&q=74042097_cpr&rb=0&rs=1&seller_id=1&sid=af190adeca97736f&ssp2=1&stid=9&t=tpclicked3_hc&td=1989498&tu=u1989498&u=http%3A%2F%2Fblog%2Estudygolang%2Ecom%2F2013%2F02%2F%25E4%25BB%25A5io%2Dwriter%25E4%25B8%25BA%25E4%25BE%258B%25E7%259C%258Bgo%25E4%25B8%25AD%25E7%259A%2584interface%2F&urlid=0" target="_blank" mpid="3" style="text-decoration: none;"><span style="color:#0000ff;font-size:13.92px;width:auto;height:auto;float:none;">type</span></a></span> Writer interface {
代码语言:javascript
复制
    Write(p []byte) (n int, err error)
代码语言:javascript
复制
}

根据go中接口的特点,所有实现了Write方法的类型,我们都说它实现了io.Writer接口。

二、io.Writer的应用

通常,我们在使用fmt包的时候是使用Println/Printf/Print方法。其实,在fmt包中还有Fprint序列方法,而且,Print序列方法内部调用的是Fprint序列方法。以Fprintln为例看看方法的定义:

代码语言:javascript
复制
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)

方法的第一个参数是io.Writer,也就是说,任何实现了io.Writer接口的类型实例都可以传递进来;我们再看看Println方法内部实现:

代码语言:javascript
复制
func Println(a ...interface{}) (n int, err error) {
代码语言:javascript
复制
    return Fprintln(os.Stdout, a...)
代码语言:javascript
复制
}

我们不妨追溯一下os.Stdout:

代码语言:javascript
复制
Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")

也就是标准输出。 从这里可以看出,os.File也实现了io.Writer,那么,如果第一个参数传递的是一个普通文件,内容便会被输出到该文件。 如果第一个参数传递的是bytes.Buffer,那么,内容便输出到了buffer中。

在写Web程序时,比如:

代码语言:javascript
复制
func Index(rw http.ResponseWriter, req *http.Request) {
代码语言:javascript
复制
    fmt.Fprintln(rw, "Hello, World")
代码语言:javascript
复制
}

这样便把”Hello World”输出给了客户端。

三、关于接口更多学习资料

1、Rob Pike谈Go中的接口

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、io.Writer接口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档