这是我参与「第三届青训营-后端场」笔记创作活动的的第3篇笔记
Go读取文件 bufio.NewReader
在 Golang 中,读取文件有四种方法,分别为:
- ioutil.ReadFile
- file.Read
- bufio.NewReader
- ioutil.ReadAll
这里主要介绍bufio.NewReader
r := bufio.NewReader(file) //file要读取的文件句柄。
n, err := r.Read(buf) //buf读取的数据存放的缓冲区。
返回值
| 返回值 | 描述 |
|---|---|
| n | 读取到的长度。 |
| err | 读取失败,则返回错误信息。 |
使用 NewReader 读取文件时,首先打开文件,使用打开的文件返回的文件句柄当作函数参数传入 NewReader。 也可以从标准输入读取,例如
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n') // 将在rd中查找, 并将返回的[]byte转换成string与err一并返回
- ReadString('\n') 以分隔字符方式读取,遇到传入的分割字符时就返回结果,返回的结果包含分隔字符本身,返回的类型为string,比如传入\n,代码遇到\n字符就返回,而文件行尾都是以\n结尾,所以ReadString('\n')就实现了分行读取
Go语言去除字符串后缀
去除字符串后缀 TrimSuffix 函数与去除字符串右边指定字符串的函数 TrimRight 的区别是:
如果右边有两个或者多个匹配的后缀,那么 TrimRight 只会去除第一个(从右),而 TrimSuffix 会全部去除,例如我们从input读取到一个字符串数字,把它变成数字类型
input = strings.TrimSuffix(input, "\n")
num, err := strconv.Atoi(input) //strconv.Atoi字符串转数字,报错
input = strings.TrimSuffix(input, "\r\n")
num, err := strconv.Atoi(input)
换行问题
win10平台在你按回车之后,会在参数的末尾加上\r\n作为换行符,而你的代码只处理了\n(linux系统下换行符)的这种情况,没有考虑\r\n这种情况。
Go nil
nil是一个预先声明的标识符,表示指针、通道、函数、接口、映射或切片类型。
nil是go语言中预先的标识符
我们可以直接使用nil,而不用声明它。
nil可以代表很多类型的零值(类似NULL)
在go语言中,nil可以代表下面这些类型的零值:
-
指针类型(包括unsafe中的)
-
map类型
-
slice类型
-
function类型
-
channel类型
-
interface类型