让我们开始吧:GO语法基础 | 青训营笔记

91 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第1天

GO工具

  • go build:源码文件编译为二进制文件
  • go run:编译并运行源码文件,而且不保存可执行文件
  • go fmt:使用GO标准格式重新格式化源文件
  • go version:显示当前的GO版本号

GO语言变量声明:

  1. 声明变量
var oneNum int
var twoNum int = 22
oneNum = 11
var oneString string = "jiaozebin"
  1. 短变量声明
// 必须提前知道变量的初始值是什么
threeNum := 33
// 这样就不需要明确声明变量的类型,根据赋的值确定类型
twoString := "jiao"
// 所有声明的变量必须要在程序中使用,如果不使用,也必须要删除声明
fmt.Println("twoString = ", twoString)
  • 小tips:同一个变量不能再同一个作用域内被声明两次,如下:
a := 1
fmt.Println(a)
a := 2
fmt.Println(a)
// errorInfo: no new variables on left side of :=

// 短变量声明中有一个变量必须是新的就可以
b, a := 3, 4
a, c := 5, 6
// 这里就会发生 声明"b",赋值"a",赋值"a",声明"c".
  1. 命名规则(编译器规则)
  • 变量、函数或类型的名称以大写字母开头,则认为他是可导出的,可以从当前包之外的包访问它。(例如:fmt.Println()
  • 若以小写字母开头,则认为该名称是未导出的,只能在当前包中使用。
  1. 避免遮盖变量名
  • go语言中,我们自定义变量时,如果和现有的函数,包,类型等关紧字冲突时,不会发生错误,但会遮盖关紧字原有的功能。
var int int 20
// 下面该行代码就会报错,`int is not a type`
var conest int

输入流

reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
   log.Fatal(err)
}
guessNum, err := strconv.ParseFloat(strings.TrimSpace(input), 64)
if err != nil {
   log.Fatal(err)
}
fmt.Println("guessNum = ", guessNum)

根据这一小段代码,标注几点和其他语言不一样的地方

  • 先产生一个字符流输入对象,然后再调用ReadString()方法输入信息。
  • 小坑:ReadString()方法会返回两个值,这在go语言中是允许的,err会返回程序运行过程中发生的错误。
    1. 我们可以使用_来接收这个err,而不去处理它
    1. 使用log.Fatal()方法,意味着报告该错误,并杀死程序

**源:**《Head First GO语言程序设计》——Jay McGavren, 刘红泉,王佳 译