【Go语言系列】2.3、Go语言基本程序结构:变量及常量
1、什么变量
变量来源于数学,从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。
1.1变量声明
go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。
第一种,指定变量类型,声明后若不赋值,使用默认值。
var v_name v_type
v_name = value
第二种,根据值自行判定变量类型。
var v_name = value
第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。
v_name := value
// 例如
var a int = 10
var b = 10
c : = 10
(冒号和等号的组合:=),用于明确表达同时进行变量声明和初始化的工作。
1.2、多变量声明
1、类型相同多个变量, 非全局变量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
2、自动推断,不需要显示声明类型
var vname1, vname2, vname3 = v1, v2, v3
vname1, vname2, vname3 := v1, v2, v3 //出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误
3、类型不同多个变量, 全局变量, 局部变量不能使用这种方式
var (
vname1 v_type1
vname2 v_type2
)
实例如下:
package main
var x, y int
var ( //这种只能出现在全局变量中,函数体内不支持
a int
b bool
)
var c, d int = 1, 2
var e, f = 123, "hello"
//这种不带声明格式的只能在函数体中出现
//g, h := 123, "hello"
func main(){
g, h := 123, "hello"
fmt.println(g) //输出变量g
fmt.println(h) //输出变量h
}
1.3、变量赋值与初始化
在变量声明时,就给变量指定一个值,这个过程叫变量初始化,如:
package main
//初始化变量c的值为2;变量d的值为2。
var c, d int = 1, 2
//初始化变量e的值为123;变量f的值为'hello'。
var e, f = 123, "hello"
func main(){
//初始化变量g的值为123;变量h的值为'hello'。
g, h := 123, "hello"
fmt.println(g) //输出变量g
fmt.println(h) //输出变量h
}
在go语法中,变量初始化和变量赋值是两个不同的概念。下面为声明一个变量之后的赋值过程:
package main
import "fmt"
func main() {
//初始化变量g的值为123;变量h的值为'hello'。
g, h := 123, "hello"
g = 234 //将 234 赋值给变量g
fmt.println(g) //输出变量g
fmt.println(h) //输出变量h
}
1.4、匿名变量
在go语言中,单个的下划线“_”是一个特殊的变量,我们称之为匿名变量(anonymous variable),匿名变量不占用命名空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用
我们在使用传统的强类型语言编程时,经常会出现这种情况,即在调用函数时为了获取一个值,却因为该函数返回多个值而不得不定义一堆没用的变量。在go中这种情况可以通过使用匿名变量来避免从而让代码看起来更加的优雅。
假设gettime()函数的定义如下,它返回2个值,分别为hour和minute:
func gettime() (hour, minute int) {
return 11,20
}
若只想获得hour,则:
h,_ := gettime()
2、常量
在go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。
2.1、 常量定义
常量的定义格式:
const identifier [type] = value
你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。举例:
const pi float64 = 3.14159265358979323846
const zero = 0.0 // 无类型浮点常量
const pi, zero float32 = 3.14159265, 0.0 // 常量的多重赋值
// pi = 3.14159265, zero = 0.0, name = "roy", 无类型整型和字符串常量
const pi, zero, name = 3.14159265, 0.0, "roy"
2.2、枚举
定义一组常量,在go语言中叫做枚举,例如:
const (
sunday = 0
monday = 1
tuesday = 2
wednesday = 3
thursday = 4
friday = 5
saturday = 6
)
2.3、预定义常量
go语言预定义常量:true、false和iota。其中true、false是两个bool类型的值,这个我们在后面的“数据类型”这一节会讲到。
iota是一个可以被编译器修改的常量。在每一个const关键字出现时,被重置为0,然后再下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1,举例:
package main
import (
"fmt"
)
func main() {
const (
sunday = iota
monday = iota
tuesday = iota
wednesday = iota
thursday = iota
friday = iota
saturday = iota
)
const (
a = iota
b = iota
)
fmt.println(sunday, monday, tuesday, wednesday, thursday, friday, saturday)
fmt.println(a, b)
}
以上代码输出:
0 1 2 3 4 5 6
0 1