老师我这里有点疑惑,可以麻烦解惑吗

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

gsdad_white

2020-04-01

老师我有下面三个问题,可以麻烦解答一下吗

在main中调用 printFileContent时

 1. printFileContent接收的参数为 reader io.Reader ,我们能使用 fibonacci() 作为参数传入的原因是因为 fibonacci() 函数的返回值为intGen,且intGen实现了Reader。所以我们才能将 fibonacci() 作为参数传入吗?
 2. 在 printFileContent 中的 newReader.Scan()  ,实际上到底读取到的是什么呢?是每次调用intGen返回的 int 值吗?
 3. 我通过 debug 发现 newReader.Text() 被调用时,在 scan.go 中的 213 line中才会调用,请问 我们实现的Read真的是在这里才会被调用吗?其他地方有触发吗?

图片描述

写回答

1回答

ccmouse

2020-04-06

Scan在执行的时候会调用到Read。Read的作用是把读到的内容写入传进来的这个参数p []byte。返回的n是写入的字节数。具体在哪里调用到Read,我们不用关心,我们只要实现了Read函数,就能使用这个Scanner,因为它的参数是io.Reader。

想知道的话的确通过调试器是很好的方法。同学可以把断点设在我们写的Read函数的第一行,就能看到这个Scanner是怎么调用Read了。当然,地方不止一处,想要知道所有地方,就要靠搜索代码了。

0
0

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

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

5995 学习 · 1909 问题

查看课程