变量说明
变量是程序的基本组成单位,无论使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位。
变量的概念
变量相当于内存中一个数据存储空间的表示,有自己的名称(变量名
)和类型(数据类型
)
你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,同样的道理,通过变量名可以访问到变量
变量的使用步骤
- 申明变量
- 变量赋值
- 使用变量
变量的基本使用步骤如下:
package main
import (
"fmt"
)
func main() {
var name string //申明变量
name = "smile" //变量赋值
fmt.Println(name) //使用变量
}
变量的注意事项
变量声明后,必须使用
,否则程序报错:imported and not used: "fmt"
变量声明后,不能重复声明
,否则程序报错:age redeclared in this block
变量名注意事项
- 由26个英文字母大小写,0-9,_组成
- 不能以数字开头
- Golang中严格区大小写
- 标识符不能包含空格
- 下划线“_”本身在Golang中是一个特殊的标识符,称为空标识符。可以表示任何其他的标识符,但是对它的值会被忽略(比如:返回某个值)。所以仅能被作为占位符使用,不能作为标识符使用
声明单一变量
声明一个变量的语法:var name type
例如
package main
import "fmt"
func main() {
var name string //变量声明
fmt.Println(name)
}
语句 var name string
声明了一个类型为string
,名称为name
的变量,如果一个变量没有被赋予任何值,Go会自动将这个变量初始化其类型的0
值。
类型 | 零值 |
---|---|
bool | false |
string | "" |
int | 0 |
float | 0.0 |
map | nil |
slice | nil |
array | 长度为 lenth 每个元素的零值为 type 对应的零值 |
一个变量可以被赋予其任何类型的任何值。
package main
import "fmt"
func main() {
var name string //变量声明
name = "smile" //变量赋值
fmt.Println(name)
name = "易文杰" //变量赋值
fmt.Println(name)
}
声明一个带初始值的变量
在申明变量的时可以指定其初始值
申明一个带初始值的变量的语法为:var name type = initalvalue
package main
import "fmt"
func main() {
var name string = "smile"
fmt.Println(name)
}
在上面程序中,name
是一个string
类型的变量,初始值为smile
。运行上面的程序,输出如下,可以看到name
的初始值确实为smile
smile
类型推导
如果声明一个变量时提供了初始值,Go可以根据该初始值来自动推导变量的类型。因此如果申明变量时提供了初始值,就可以不必指定其类型。
也就是说,如果声明变量的类型为:var name = initialvalue
,Go将根据initialvalue
自动推导变量name
的类型。
在下面的例子中,你可以看到申明变量name
时,并没有指定其类型。因为name
的初始值为smile
,Go会自动推导出其类型为string
。
package main
import "fmt"
func main() {
var name = "smile"
fmt.Println(name)
}
多变量申明
多个变量可以在一条语句中申明。
多个变量申明的语法为:var name1,name2 type = initialvalue1,initialvalue2
,例如:
package main
import "fmt"
func main() {
var name,sex string = "smile","男"
fmt.Println(name,sex)
}
如果指定了初始值,则type可以省略。下面的程序利用类型推导声明了多个变量:
package main
import "fmt"
func main() {
var name,sex = "smile","男"
fmt.Println(name,sex)
}
当不指定初始值,它们会自动赋零
值。
package main
import "fmt"
func main() {
var name,sex string
fmt.Printf("姓名是%v\n性别是%v",name,sex)
}
将会输出
姓名是
性别是
有些时候我们需要在一条语句中申明多个不同类型的变量,我们可以使用下面的语法达到此目的:
var name,age = "smile",18
var (
name = "smile"
age = 18
)
速记声明
Go 提供了另一种简洁的声明变量的方式,这种方式称为速记声明(shorthand declaration)。速记声明使用:=
操作符来申明变量
速记声明的语法为:name := initialvalue
,例如:
package main
import (
"fmt"
)
func main() {
name,sex := "smile","男"
fmt.Println(name,sex)
}
上面的程序,输出如下:
smile 男
速记声明要求在 :=
的左边必须至少有一个变量时新声明的,否则程序报错:
no new variables on left side of :=
一个变量不能被赋予与其类型不同的值。
下面的程序将报错:
annot use 12 (type untyped int) as type string in assignment
。这是因为name
被申明为string
类型,但是试图将int
类型的值赋予给它
package main
import (
"fmt"
)
func main() {
name,sex := "smile","男"
name = 12
fmt.Println(name,sex)
}