This commit is contained in:
关胜 2024-06-17 20:02:29 +08:00 committed by GitHub
commit fba60e0388
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -135,7 +135,7 @@ func countLines(f *os.File, counts map[string]int) {
`map` 是一个由 `make` 函数创建的数据结构的引用。`map` 作为参数传递给某函数时该函数接收这个引用的一份拷贝copy或译为副本被调用函数对 `map` 底层数据结构的任何修改,调用者函数都可以通过持有的 `map` 引用看到。在我们的例子中,`countLines` 函数向 `counts` 插入的值,也会被 `main` 函数看到。(译注:类似于 C++ 里的引用传递,实际上指针是另一个指针了,但内部存的值指向同一块内存)
`dup` 的前两个版本以"流”模式读取输入,并根据需要拆分成多个行。理论上,这些程序可以处理任意数量的输入数据。还有另一个方法,就是一口气把全部输入数据读到内存中,一次分割为多行,然后处理它们。下面这个版本,`dup3`,就是这么操作的。这个例子引入了 `ReadFile` 函数(来自于`io/ioutil`包),其读取指定文件的全部内容,`strings.Split` 函数把字符串分割成子串的切片。(`Split` 的作用与前文提到的 `strings.Join` 相反。)
`dup` 的前两个版本以"流”模式读取输入,并根据需要拆分成多个行。理论上,这些程序可以处理任意数量的输入数据。还有另一个方法,就是一口气把全部输入数据读到内存中,一次分割为多行,然后处理它们。下面这个版本,`dup3`,就是这么操作的。这个例子引入了 `ReadFile` 函数(来自于`io/ioutil`包),其读取指定文件的全部内容,`strings.Split` 函数把字符串分割成子串的切片。(`Split` 的作用与前文提到的 `strings.Join` 相反。请注意如果在Windows下测试注意换行是否为\r\n否则最后一行是否有空行将会影响结果。
我们略微简化了 `dup3`。首先,由于 `ReadFile` 函数需要文件名作为参数,因此只读指定文件,不读标准输入。其次,由于行计数代码只在一处用到,故将其移回 `main` 函数。