请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于接口和Read

老师好,我刚刚开始学,基础有点薄弱,这个例子有些不是很懂,麻烦问一下:

  1. type intGen func() int里面调用的intGen是一个接口吗?接口的定义不是应该有interface吗?如type Retriever interface {
    Get(url string) string
    }
    2.printFileContents(f)这句执行的时候是什么顺序呢?是因为定义了intGen的方法接收器吗?func (g intGen) Read(),那比如说他定义了多个函数呢?比如:func (g intGen) Write()? f并不是一个io.Reader类型呀?
    好懵,求解答~谢谢

正在回答

1回答

intGen不是接口,是一个类型。他被定义成函数func() int,也就是说,intGen是一种每调用一次会返回一个int的函数。

printFileContents(f),这里f必须是一个io.Reader,因为有

func printFileContents(reader io.Reader)

这里的f也的确是一个io.Reader,因为它的类型是intGen。而intGen的确实现了io.Reader接口,因为我们实现了func (g intGen) Read()。

我们当然也可以为intGen定义Write函数,定义了Write函数,它就即是Reader也是Writer,这么做编译是能够通过的。不过我们这里printFileContents只是需要一个Reader,Write函数不会被用到。

1 回复 有任何疑惑可以回复我~
  • 提问者 qq_心晴_29 #1
    谢谢老师
    回复 有任何疑惑可以回复我~ 2020-01-19 23:28:10
  • ZoneTw #2
    請問老師可以這樣理解嗎?
    函式在 go 是一級公民, 透過給定 type (intGen) , 讓函式可以擁有符合 io.Reader 接口的方法
    用 js 來類比的話就相當於
    const fibonacci = function(){}
    fibonacci.Reader = function(){}
    回复 有任何疑惑可以回复我~ 2020-04-01 16:14:07
  • ccmouse 回复 ZoneTw #3
    可以的。就是这么理解。
    回复 有任何疑惑可以回复我~ 2020-04-01 20:51:05
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信