刚学go,我想读一个文件,一行一行读,从网上找到哪下代码,可以运行,但却搞不懂为什么这么写:
问题在下面代码里面,请大家详细回复一下,实在搞不懂这语法
path := "test.txt"
log.Print(path)
file, err := os.Open(path) //func Open(name string) (*File, error) Open返回的是 *File
//func NewScanner(r io.Reader) *Scanner
//但是NewScanner 的入参是 io.Reader,为什么file能传入 NewScanner 呢?
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
查到原因了:
Reader接口的方法集只包含一个Read方法,因此,所有实现了Read方法的类型都实现了io.Reader接口,也就是说,在所有需要io.Reader的地方,可以传递实现了Read()方法的类型的实例。
因为 File 实现了 Read() 方法,也就是实现了 io.Reader 接口,所以可以传给 NewScanner
#1