常量
在计算机内存中,常量(Constants)用于存储值固定不变的数据,并给出名称。常量的声明格式如下:
const name [type] = value
- 关键字 const 用于声明常量的定义。
- name 表示常量名。
- 方括号表示 type 部分可选,代表常量的类型。当程序员没有指定该部分时,常量的类型将根据最后的 value(值)自动推断得出;当程序员显式指定 type 时,常量将被限定为特定的数据类型。
- = 为赋值符号,用于将 value 值赋给常量 name。一旦完成赋值,名称为 name 的常量就有了值,且不会改变。
1、单一常量声明
举个例子:package main import "fmt" //单一常量声明及使用 func main() { const age=1 //声明值为1的整型常量age const num int =10 //声明值为10的整型常量num, int为指定的类型 fmt.Println("三酷猫!",age,"岁",num,"只") //打印输出常量,通过逗号分隔可以输出多个常量 }在 GoLand 代码编辑框中单击代码左侧的绿色三角形按钮,执行代码的编译运行,结果如下:
三酷猫! 1 岁 10 只
Process finished with exit code 0
注意,常量的类型只能是基本数据类型,即布尔型、数字型(整型、浮点型和复数型)和字符串型。
2、批量常量声明
举个例子:const( e = 2.7182818 //数学中的自然常数e pi = 3.1415926 //数学中的7位小数,圆周率π ) fmt.Println("数学里的常量:",e,pi) //打印输出常量从上述定义中可以发现,在批量声明常量时,在关键字 const 后面使用圆括号包裹连续声明的多个常量。其运行结果如下:
数学里的常量: 2.7182818 3.1415926
3、常量生成器iota
使用关键字 iota 可以为批量常量进行连续增 1 赋值。iota 初始值为 0。举个例子:
const( spring=iota //初始值为0,可以通过iota+1方法调整初始值 summer autumn winter ) fmt.Println("一年四季:",spring,summer,autumn,winter)上述代码的运行结果如下:
一年四季: 0 1 2 3
变量
在计算机内存中,变量(Variable)用于存储值可变化的数据,并给出名称。变量的声明格式如下:
var name [type] = [expression]
关键字 var 用于声明变量定义;name 是变量名;type 用于指定变量的类型;xpression 是表达式。Go 语言的变量基本类型包括数字型(整型、浮点型、复数型)、布尔型、字符串型。和常量类似,在声明变量时,type 也是可以被省略的。另外,expression 也是可以被省略的。但是这二者不允许同时省略。
1、单一变量声明
在 Go语言中,声明某个变量有 3 种途径。1) 显式指定变量类型。在使用关键字 var 声明变量时显式指定变量类型:
var age int //定义整型变量age,其默认初始值为0, int为指定的类型 fmt.Println(age)运行结果如下:
0
2) 通过值判断类型,例如:
var age0 = 1 //编译器通过值判断类型
3) 连续声明同一类型的变量,例如:
var n1,n2,n3 int //连续声明同一类型的变量
2、批量变量声明
当需要连续声明多个变量时,可以采用批量格式声明,这样可以少写几个 var。例如:var( num int //数量 age1 int //年龄 name string //姓名,字符串型 )
3、简短格式声明
Go语言还提供了一种简短格式的变量声明方法,格式如下:名字:=表达式
这里的名字为变量名,中间省略了类型指定,使用“:=”代替,并且后面必须赋值,这里的值可以用表达式计算。该方法仅限在一个函数体内使用,例如:day:=5当一个变量被声明后,Go语言会自动赋予它一个初始值:整型为 0、浮点型为 0.0、复数型为(0+0i)、布尔型为 false、字符串型为空字符串 ""、指针为 nil。
作用域
根据使用范围的不同,变量可以分为全局变量和局部变量。全局变量是指在函数体外定义的变量,不但可以在本代码文件中使用,而且可以在其他代码文件中通过“import 变量名”的形式使用。全局变量只有在程序终止运行时才会在内存中被销毁。
局部变量是指在函数体内声明的变量,它们的作用域只在函数体内,在函数执行完成后,会在内存中被销毁。
举个例子:
package main import "fmt" //变量声明 var expA=1 //全局变量 func main() { //主函数 var expA int = 2 //局部变量 fmt.Println(expA,expB) } var expB=5 //全局变量运行结果如下:
2 5
为何运行结果是 2 5,而不是 1 5 呢?这是因为用于打印输出的 expA 变量是在 main() 函数体内而非全局变量 expA 内声明的。也就是说,当有相同名称的两个变量分别位于函数体内和全局内时,函数体内的变量享有更高的使用优先权。当然,由于函数体内声明的变量是局部变量,因此上例中若存在另一个函数,且函数体内没有声明名称为 expA 的变量时,则在该函数中打印 expA 的值为 1。
注意,全局变量声明必须以 var 关键字开头,如果想要在外部包(Package)中使用全局变量,则其首字母必须大写。