Go语言学习之路:Go语言中的变量、常量
(一)Go语言变量
Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。
声明变量的一般形式是使用 var 关键字:
var a type
1、单变量声明:(分为三种)
全局变量:
第一种:指定变量类型,声明后若不赋值,使用默认值。
var v bool
v = true/false
第二种:根据值自行判定变量类型。
var v = 3
局部变量:
第三种:简短格式,省略var关键字。
(注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。
并且有以下限制性:
定义变量,同时显式初始化。
不能提供数据类型。
只能用在函数内部。)
v_name := value
以上三种定义变量方式举例如下:
var a int = 10
var b = 10
c : = 10
2、多变量声明:
//类型相同的多个变量, 非全局变量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
//自动分配类型
var vname1, vname2, vname3 = v1, v2, v3
//出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误
vname1, vname2, vname3 := v1, v2, v3
//类型不同的多个变量, 全局变量, 局部变量不能使用这种方式:
var (
vname1 v_type1
vname2 v_type2
)
3、匿名变量:
匿名变量“_”:使用匿名变量时,只需要在变量声明的地方使用下画线替换即可。
例如:
func GetData() (int, int) {
return 100, 200
}
func main(){
a, _ := GetData()
_, b := GetData()
fmt.Println(a, b)
}
代码运行结果:
100 200
4、变量的生命周期:
变量的生命周期和作用域息息相关:
全局变量:它的生命周期和整个程序的运行周期是一致的;
局部变量:它的生命周期则是动态的,从创建这个变量的声明语句开始,到这个变量不再被引用为止;
形式参数和函数返回值:它们都属于局部变量,在函数被调用的时候创建,函数调用结束后被销毁。
(二)Go语言常量
1、Go语言中的常量使用关键字 const 定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式。
例如:
显式类型定义: const a string = “abc”
隐式类型定义: const a = “abc”
2、iota 常量生成器:
常量声明可以使用 iota 常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。在一个 const 声明语句中,在第一个声明的常量所在的行,iota 将会被置为 0,然后在每一个有常量声明的行加一。
例如:首先定义一个 Weekday 命名类型,然后为一周的每天定义了一个常量,从周日 0 开始。在其它编程语言中,这种类型一般被称为枚举类型。
package main
import "fmt"
func main(){
fmt.Println(b)
type Weekday int
const (
Sunday Weekday = iota //第一行定义值为0,以此类推
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
fmt.Println(Friday)
}
运行结果为:
5
(三)拓展
Go语言整型:
int(有符号整型)、uint(无符号整型)
哪些情况下使用 int 和 uint:
程序逻辑对整型范围没有特殊需求。例如,对象的长度使用内建 len() 函数返回,这个长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用 int 来表示。
反之,在二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint。
本文地址:https://blog.csdn.net/weixin_45432093/article/details/109338605