1.变量的简介

声明变量的一般形式是使用 var 关键字:var identifier type
可以写成

  1. var (
  2. a int
  3. b bool
  4. str string
  5. )

Go 编译器的智商已经高到可以根据变量的值来自动推断其类型,

  1. var a = 15
  2. var b = false
  3. var str = "Go says hello to the world!"
  1. var (
  2. a = 15
  3. b = false
  4. str = "Go says hello to the world!"
  5. numShips = 50
  6. city string
  7. )

在函数体内声明局部变量时,应使用简短声明语法 :=
a := 1

  1. 同一类型的多个变量可以声明在同一行
  2. var a, b, c int
  3. 多变量可以在同一行进行赋值,如:
  4. a, b, c = 5, 7, "abc"
  5. 上面这行假设了变量 ab c 都已经被声明,否则的话应该这样使用:
  6. a, b, c := 5, 7, "abc"
  7. 这被称为 并行 同时 赋值

交换两个变量的值,则可以简单地使用 a, b = b, a

空白标识符 也被用于抛弃值,如值 5 在:, b = 5, 7 中被抛弃。

_ 实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。
并行赋值也被用于当一个函数返回多个返回值时,比如这里的 val 和错误 err 是通过调用 Func1 函数同时得到:val, err = Func1(var1)。

2.值类型与引用类型

所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,另外,像数组和结构这些复合类型也是值类型

更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。
一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。
Go 语言中,指针属于引用类型,其它的引用类型还包括 slices,maps和 channel。被引用的变量会存储在堆中,以便进行垃圾回收,且比栈拥有更大的内存空间。

3.init函数

变量除了可以在全局声明中初始化,也可以在 init 函数中初始化。这是一类非常特殊的函数,它不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高。
每一个源文件都可以包含一个或多个 init 函数。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。
一个可能的用途是在开始执行程序之前对数据进行检验或修复,以保证程序状态的正确性。

4.遇到的bug

cannot find package “.” in
image.png
image.png