3.变量语法声明
声明语句用于定义程序的各种实体对象,如:
- var 声明变量
- sonst 声明常量
- func 声明函数
- typ 声明类型
变量
什么是变量?
变量是值对一块存储空间的定义名称 ,通过名称对存储空间的内容进行访问或者修改。变量声明的常见语法:
变量的声明必须满足标识语法:
1,定义一个me的变量,并指定变量类型
2,赋值me 值为linuxea.com
需要满足标识符的命名规则。
- 必须由非空的unicode字符串组成,数字,_
- 不能是数字开头
- 不能为go的关键字
- 避免和go预定义的(25个)标识符冲突,如:true,false等
- 建议使用驼峰式
- 标识符区分大小写
var me string
me = "linuxea.com"
如下:
[root@LinuxEA /opt/Golang]# cat 02.go
package main
import "fmt"
func main(){
var me string
me = "linuxea.com"
fmt.Println(me)
}
!!! 警告
注意:函数体内的变量必须使用,否则会报错
运行
[root@LinuxEA /opt/Golang]# go run 02.go
linuxea.com
函数外变量
现在我们在函数之外定义一个变量,使用等号=进行赋值
!!! note
如果定义的变量没有赋值,就会自动赋值一个零值
var version string = "www.linuxea.com"
如下:
package main
import "fmt"
var version string = "www.linuxea.com"
func main(){
var me string
me = "linuxea.com"
fmt.Println(me)
}
函数外的变量没有使用是不会报错的。
[root@LinuxEA /opt/Golang]# go run 02.go
linuxea.com
定义多个变量
通常在定义变量的时候,使用var,每次定义一个。
var name string
var age string
其实我们可以使用逗号将同一个类型的变量隔开进行定义
var name,age string
而对多个变量赋值的时候,也可以如此
name,age = "mark","18"
如下:
package main
import "fmt"
var version string = "www.linuxea.com"
func main(){
var me string
me = "linuxea.com"
fmt.Println(me)
var name,age string
name,age = "mark","18"
fmt.Println(name,age)
}
运行:
[root@LinuxEA /opt/Golang]# go run 02.go
linuxea.com
mark 18
当然了,也可以把不同类型的变量在一起定义,使用括号即可
- 不同类型的多个变量定义
我们可以使用var括号进行定义,比如定义一个tel是int类型的,和一个desc是string类型的,如下:
var (
tel int
desc string
)
赋值
tel,desc = 10086,"联通"
fmt.Println(tel,desc)
运行
[root@LinuxEA /opt/Golang]# go run 02.go
linuxea.com
mark 18
10086 联通
当然了, 我们也可以在声明的时候进行赋值,如下:
var (
tel int = 10086
desc string = "上海"
)
fmt.Println(tel,desc)
运行结果仍然不变
[root@LinuxEA /opt/Golang]# go run 02.go
linuxea.com
mark 18
10086 上海
简短声明
然而,在定义变量的时候,可以不指定类型,go会根据赋值类型自动推导,但是必须赋值,如下:
!!! note
使用`:=`冒号等于做简短赋值,左边是变量名,右边是值
tel,desc := 10010,"上海市淞虹路"
fmt.Println(tel,desc)
运行
[root@LinuxEA /opt/Golang]# go run 02.go
10010 上海市淞虹路
var与简短声明的区别
!!! note
> 注意:这里使用了简短声明,没有使用var声明 。在函数体内可以使用简短声明。而在函数体外必须使用var 定义,如下,go会根据值类型进行自动推导类型
package main
var tel,desc = 10010,"上海市淞虹路"
func main(){} // 函数体
或
package main
var (
tel int = 10086
desc string = "上海"
)
func main(){} // 函数体
重复赋值
!!! note
> !注意:变量只能声明一次,不能重复定义,但是可以重复赋值
tel := 10086
desc := "上海"
重复赋值,重复赋值只需要等号即可
tel = 10010
desc = "北京"
运行结果是最近的赋值结果
[root@LinuxEA /opt/Golang]# go run 03.go
10010 北京
值交换
当一次定义了多个值的时候就可以进行交换,这个方式很简单,如下:
tel,desc := "10010","上海"
fmt.Println(tel,desc)
tel,desc = desc,tel
fmt.Println(tel,desc)
package main
import "fmt"
var version string = "www.linuxea.com"
func main(){
tel,desc := "10010","上海"
fmt.Println(tel,desc)
tel,desc = desc,tel
fmt.Println(tel,desc)
}
运行
[root@LinuxEA /opt/Golang]# go run 03.go
10010 上海
上海 10010
!!! note
> 注意:这里交换的值必须是同类型。