这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
main
main包比较特殊。它定义了一个独立可执行的程序,而不是一个库。在main里的main 函数 也很特殊,它是整个程序执行时的入口。main函数所做的事情就是程序做的。
语句末尾
Go语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句。实际上,编译器会主动把特定符号后的换行符转换为分号,因此换行符添加的位置会影响Go代码的正确解析。
举个例子,函数的左括号{必须和func函数声明在同一行上,且位于末尾,不能独占一行,而在表达式x + y中,可在+后换行,不能在+前换行(注:以+结尾的话不会被插入分号分隔符,但是以x结尾的话则会被分号分隔符,从而导致编译错误)。
读取输入
Scanner
bufio包,它使处理输入和输出方便又高效。Scanner类型是该包最有用的特性之一,它读取输入并将其拆成行或单词;通常是处理行形式的输入最简单的方法。
程序可以使用短变量声明创建bufio.Scanner类型的变量input。
input := bufio.NewScanner(os.Stdin)
该变量从程序的标准输入中读取内容。每次调用input.Scan(),即读入下一行,并移除行末的换行符;读取的内容可以调用input.Text()得到。Scan函数在读到一行时返回true,不再有输入时返回false。
NewReader
注意:在Windows环境中,读取的换行符会被转换为\r\n,而在Linux中是\n
reader := bufio.NewReader(os.Stdin)
...
input, err := reader.ReadString('\n')
...
input = strings.TrimSuffix(input, "\r\n")
...
guess, err := strconv.Atoi(input)
...
变量
变量声明
var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。
变量声明的一般语法如下:
var 变量名字 类型 = 表达式其中“类型”或“= 表达式”两个部分可以省略其中的一个。- 如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。
- 如果初始化表达式被省略,那么将用零值初始化该变量。
简短变量声明
语法如下:
变量名字 类型 := 表达式其中类型可省略
注:简短变量声明语句中必须至少要声明一个新的变量。
简短变量声明语句只有对已经在同级词法域声明过的变量才和赋值操作语句等价,如果变量是在外部词法域声明的,那么简短变量声明语句将会在当前词法域重新声明一个新的变量。
变量零值
- 数值类型变量对应的零值是0
- 布尔类型变量对应的零值是false
- 字符串类型对应的零值是空字符串
- 接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil
- 数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值
\