值类型:所有像int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &i 获取变量 i 的内存地址。

引用类型:复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。一个引用类型的变量r1存储的是r1的值所在的内存地址(数字),或内存地址中第一个字所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个字中。

局部变量被声明后必须在相同的代码块中使用它,否则会得到编译错误,全局变量允许声明但不使用.如果要交换两个变量(已声明且赋值)的值,可以简单地使用a,b = b,a,这被称为并行或同时赋值; _实际上是一个只写变量,我们无法得到它的值,这样做是因为Go语言中必须使用所有被声明的局部变量,但有时我们并不需要使用从一个函数中得到的所有返回值;并行赋值也被用于当一个函数返回多个返回值时,比如这里的val和错误err是通过调用func1函数同时得到:val,err = func1()

iota:特殊常量,可以认为是一个可以被编译器修改的常量。在每一个const关键字出现时,被重置为0,然后在下一个const出现之前,每出现一次iota,值自动加1。