next:=g()?这是什么语法,方法还能调用实现的函数的实现接口?

来源:7-2 函数式编程例一

佛系biu

2020-10-17

func (g intGen) Read(p []byte) (int, error) {
  // 这块的语法规则老师帮忙看看
   next := g()
   if next > 10000 {
      return 0, io.EOF
   }
   //s := strconv.Itoa(next) + "\n"
   s := fmt.Sprintf("%d\n", next)
   return strings.NewReader(s).Read(p)
}
写回答

1回答

ccmouse

2020-10-20

g是一个函数类型,所以可以调用。go语言中函数是一等公民,而且可以给任何自定义类型添加方法。

所以函数类型也可以有方法。

intGen是一个返回int的函数。使用起来的话,是这样的:

f := intGen(func () int {

    return 3

})

b := make([]byte, 1024)

f.Read(b)

我在课上使用了Scanner,Scanner在运行时会调用Read,而Read会调用g

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程