由于不是纯编程零基础的教程,所以不会在这里讲述“变量”的概念,后续的文章也是。
在 Go 语言中,定义变量主要有两种方式,一个是使用 var
关键字,另外一个就是使用 :=
的方式。虽然这部分内容很简单,但是各种使用姿势还是要学会的。
使用 var 来定义变量
如果做过前端,那一定很熟悉 var
,在 Go 中,你可以像在 JavaScript 中一样定义一个变量,如下:
var age = 18
Go 语言是强类型语言,使用 var
后会自动推断变量的类型,不需要你定义类型,但是你仍然可以在声明变量的时候定义它的类型,如这样:
var age int = 18
// 格式为:var 变量名 变量类型
这里表明 age
变量是一个整型类型,关于数据类型后面会说到。需要注意的是,如果声明了类型,就不可以赋值为别的类型的值,如下面这样就会报错的:
var age int = "18" // error
age
定义为 int 类型,却赋值为字符串类型,所以报错了。
变量可以先声明,再赋值。当声明一个变量却没有赋值时,变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为 0
。 字符串变量的默认值为空字符串
。 布尔型变量默认为false
。 切片、函数、指针变量的默认为nil
。
var name string // 声明变量却没有赋值,要同时定义类型
fmt.Println(name) // 打印操作,输出为空
name = "abc" // 赋值
fmt.Println(name) // "abc"
这段代码的开始,我们只声明了变量 name
为字符串类型,但没有赋值,此时它的值是空字符串,等赋值操作后即可改变值。要注意的是,只声明变量而不赋值时,一定要同时指定变量类型,且后续赋值时也一定要是该类型的值,像这样是错的:
var name // error,变量只声明而不赋值时一定要指定类型
name = "foo"
用 var 同时定义多个变量
var
可以一次定义多个变量:
var a, b = 18, "hello world"
如果变量是相同的类型,也可以统一指定类型:
var a, b int = 18, 20 // 指定 a 和 b 都是 int 类型
但不能给每个变量都定义不同的类型:
var a int, b string = 18, "hi" // error
我们很自然地想到这样写法,同时定义 a 为整型,b 为字符串类型,这样写成一行的定义多个变量类型的方式是不允许的,要么都不指定类型,要么都指定为同一类型。一行的不行,可以用多行的方式,你也可以这样批量定义变量:
var (
a int
b string
)
// 也可以同时赋值
var (
a int = 18
b string = "hi"
)
这种方式就方便多了,不过一定要记得加上括号。
使用 :=
定义变量
:=
也叫短变量声明,它只能用在函数内部,也就是说只能定义局部变量,像这样:
package main
a := 1 // error,:= 不能用在函数外部
func main() {
b := 2 // ok
}
使用 :=
无需声明类型,建议在函数内部使用这种方式,更简洁。
匿名变量
这里补充一个匿名变量。在有多重赋值的情况下,如果想要忽略某个值,可以使用 匿名变量(anonymous variable)
。 匿名变量用一个下划线 _
表示,例如:
package main
import "fmt" // 导入包 fmt
// 这里是一个函数方法,会返回两个值
func getInfo() (int, string) {
return 18, "foo"
}
func main() {
// 使用 x 来接受方法的第一个返回值。使用 _ 来忽略第二个返回值
x, _ := getInfo()
fmt.Println(x) // 18
}
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。在实际项目中,匿名变量时常用到,应该要熟悉它。
结尾
学会定义变量是一门语言中比较简单的环节,自己手动敲代码练习一遍就会了,建议文中所有代码都编辑器过一遍哦。
如有错误,欢迎指出。