跳转至

变量与常量


更新于2022-10-22

命名规则

以字母或下划线开头,后面可以跟任意数量的字母、数字或下划线
Go使用驼峰式命名,优先使用大小写(不是下划线)分隔

变量名 导出属性 说明
首字符小写 不可导出 作用域仅限本包,属于该包的文件均可引用
首字符大写 可导出 该变量可以夸包引用

关键字

关键字 作用
var 声明变量
const 声明常量

声明变量

定义 描述
var name type = expression
var name type 当变量未指定初值时,默认为空值
var name = expression 当变量未指定类型时,可以根据后续表达式的值推断变量类型
Go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var firstName string
var firstName, lastName string
var age int
//另一种编写前一个语句的方法是在 var 关键字后面使用括号
var (
    firstName, lastName string
    age int
)

//指定变量类型
var (
    firstName string = "John"
    lastName  string = "Doe"
    age       int    = 32
)

var (
    name = "John"  //go推断出变量name的类型为string
    age   = 32     //go推断出变量age属于int类型
)

var (
    firstName, lastName, age = "John", "Doe", 32
)

短变量

函数内使用:=声明的局部变量
如果在函数外,必须使用关键字var
不能重复申请相同的变量
一次申请多个短变量时每次必须保证最少有一个新的短变量

Go
1
2
3
4
5
func main() {
    firstName, lastName := "aa", "bb"
    firstName, midName := "cc", "dd"
    println(firstName, midName, lastName)
}

匿名变量

需要定义变量
但又关心该变量时
例如: 仅关心函数部分返回值时

Go
1
2
3
4
5
6
7
func test()(a,b,c int) {
    a = 1
    b = 2
    c = 3
}
//只需要test函数里c的值
_,_,c = test()

变量默认值

若变量未初始化,则赋默认值

类型 默认值
int 0
float32/float64 +0.000000e+000
bool false
string ""
slice nil
map nil

常量

通常以混合大小写字母或全部大写字母书写
首字母大写的全局变量对外可见

内置常量

关键字
true
false
iota 预定义变量
nil 空值

若未指定常量类型,则为无类型常量
常量在赋值给变量时,只要常量数值在变量类型范围内均可

Go
1
2
3
4
5
6
const HTTPStatusOK = 200
const (
    StatusOK              = 0
    StatusConnectionReset = 1
    StatusOtherError      = 2
)

常量生成器iota

iota遇到const变0,逐项加1

Go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const(
    monday = iota   //monday = 0
    tuesday         //tudsday = 1
    wednesday       //3
    thusrday        //4
    friday          //5
    saturday        //6
    sunday          //7
)
const x = iota // x = 0
const y = iota // y = 0

const(
    one = 1 << iota   //0
    two               //2
    four              //4
    eight             //8
)

注意事项

声明变量而不使用时,Go会抛出错误