Skip to content

变量与常量 ​


更新于2022-10-22

命名规则 ​

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

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

关键字 ​

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

声明变量 ​

定义描述
var name type = expression
var name type当变量未指定初值时,默认为空值
var name = expression当变量未指定类型时,可以根据后续表达式的值推断变量类型
go
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
func main() {
    firstName, lastName := "aa", "bb"
    firstName, midName := "cc", "dd"
    println(firstName, midName, lastName)
}

匿名变量 ​

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

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

变量默认值 ​

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

类型默认值
int0
float32/float64+0.000000e+000
boolfalse
string""
slicenil
mapnil

常量 ​

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

内置常量 ​

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

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

go
const HTTPStatusOK = 200
const (
    StatusOK              = 0
    StatusConnectionReset = 1
    StatusOtherError      = 2
)

常量生成器iota ​

iota遇到const变0,逐项加1

go
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会抛出错误