在Go中,我们使用var 来定义变量:
var age = 20
变量可以在包一级定义:
package main
import "fmt"
var age = 20
func main() {
fmt.Println("Hello, World!")
}
或在一个函数内:
package main
import "fmt"
func main() {
var age = 20
fmt.Println("Hello, World!")
}
在包一级定义的变量,在组成包的所有文件中都是可见的。一个包可以由多个文件组成,你只需要创建另一个文件并在顶部使用相同的包名。
在函数级定义的变量只在该函数中可见。它在函数被调用时被初始化,并在函数结束执行时被销毁。
在我们使用的例子中:
var age = 20
我们把数值20 赋给age 。
这使得Go确定变量age 的类型是int 。
我们以后会看到更多关于类型的内容,但是你应该知道有很多不同的类型,从int,string,bool 。
我们也可以声明一个没有现存值的变量,但在这种情况下,我们必须像这样设置类型:
var age int
var name string
var done bool
当你知道值的时候,你通常使用短的变量声明与:= 操作符。
age := 10
name := "Roger"
对于变量的名称,你可以使用字母、数字和下划线_ ,只要名称以一个字符或_ 。
名称是区分大小写的。
如果名字很长,通常会使用camelCase,所以为了表示汽车的名字,我们使用carName
你可以用赋值运算符给一个变量赋一个新的值=
var age int
age = 10
age = 11
如果你有一个在程序中永不改变的变量,你可以用const ,将其声明为常量:
const age = 10
你可以在一行中声明多个变量:
var age, name
并对它们进行初始化:
var age, name = 10, "Roger"
//or
age, name := 10, "Roger"
声明的变量如果在程序中没有使用,会引起错误,程序不会被编译。
你会在VS Code中看到一个警告。

和来自编译器的错误:

如果你声明了一个变量而没有初始化它的值,它就会自动分配一个取决于类型的值,例如整数是0 ,字符串是空字符串。
Go是一种类型化的语言。
我们看到了如何声明一个变量并指定其类型:
var age int
或者让Go从分配的初始值中推断出其类型:
var age = 10
Go中的基本类型是:
- 整数 (
int,int8,int16,int32,rune,int64,uint,uintptr,uint8,uint16,uint64) - Floats (
float32,float64), 对表示小数很有用 - 复数类型 (
complex64,complex128), 在数学上很有用 - 字节 (
byte), 代表一个ASCII字符 - 字符串 (
string),是一组byte - 布尔型 (
bool),表示真或假。
我们有很多不同的类型来表示整数,你大多数时候都会使用int ,你可能会选择一个更专业的类型来进行优化(这不是你刚开始学习时需要考虑的问题)。
一个int 类型在64位系统上使用时将默认为64位,在32位系统上为32位,以此类推。
uint 是一个 ,是无符号的,如果你知道这个数字不会是负数,你可以用它来加倍你可以存储的数值。int
以上所有的基本类型都是值类型,这意味着它们在作为参数传递给函数时,或从函数返回时,都是以值传递的。