Go学习笔记03| 青训营笔记

201 阅读2分钟

这是我参与「第三届青训营-后端场」笔记创作活动的的第3篇笔记

Go读取文件 bufio.NewReader

在 Golang 中,读取文件有四种方法,分别为:

  1. ioutil.ReadFile
  2. file.Read
  3. bufio.NewReader
  4. 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可以代表下面这些类型的零值:

  1. 指针类型(包括unsafe中的)

  2. map类型

  3. slice类型

  4. function类型

  5. channel类型

  6. interface类型