hello world!那个例子就不放上来了(可能有点太ez
此篇总结一下Go中常量和变量的知识点
都知道一门语言中不建议将关键字作为变量或者是常量名,防止歧义
1 Go中都关键字
break default func interface select
const fallthrough if range type
continue for import return var
case defer go map struct
chan else goto switch package
2 Go中的变量声明格式
2.1 标准声明格式
var 关键字
var 变量名 变量类型
//举个🌰
var studentName = "张三" //Go语言尽量使用驼峰式的定义方法
var studentAddr = "Harbin"
2.2 批量声明
单个声明变量方法繁琐,Go可以批量声明:
var (
studentName string
age int
married bool
)
2.3 变量的初始化
2.3.1 单个变量的初始化
大部分编译器可以反向推导出变量的类型,也就是可以省去变量类型那个参数。
var studentName1 string = "王五" //标准声明方法
var studentName2 = "李四" //编译器根据 “李四” 倒推出studentName2的变量类型为string
2.3.2 多个变量的初始化
var studentAddr1, studentAddr2 = "Daqing", "QiqiHaer"
2.4 短变量声明
Go 语言中提供了一种简短的变量声明方式 变量名:= 表达式 用来声明和初始化函数内部的局部变量,变量的类型根据表达式自动推导。
// 声明初始化一个变量
status := "TRUE"
// 声明初始化一组同类型变量
min, max := 1, 1000
// 声明初始化一组不同类型变量
a, b, c := 3.1415, true, "hello world!"
注:短变量声明方式只能用于函数内部局部变量,不能在函数外使用!
2.5 匿名变量
我们在使用传统的强类型语言编程时,经常会出现这种情况,即在调用函数时为了获取一个值,却因为该函数返回多个值而不得不定义一堆没用的变量。在Go中这种情况可以通过结合使用多重返回和匿名变量来避免这种丑陋的写法,让代码看起来更加优雅。
假设GetInfo()函数的定义如下,它返回3个值,分别为studentName、studentAge、studentAddr :
func GetInfo() (studentName, studentAge, studentAddr string) {
return "ponnyMa", 20, "China"
}
如果只想获取studentAddr的值,则函数调用语句可以用如下方式编写:
_, _, studentAddr := GetInfo()
//这种用法可以让代码非常清晰,基本上屏蔽掉了可能混淆代码阅读者视线的内容,从而大幅降低沟通的复杂度和代码维护的难度。
3 Go中的常量声明格式
3.1 标准声明格式
const 关键字
const pi = 3.1415
const e = 2.7182
3.2 批量声明
const (
s1 = 100
s2 //批量声明常量的时候,如果某一行上面没有写值,那么默认该行和上一行是一致的
s3 //fmt打印s2,s3的值也是100
)
3.3 iota 关键字
iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。
使用iota能简化定义,在定义枚举时很有用。
举例如下:
//iota关键字,iota在const关键字出现时会被置为0,之后const中每增加一行常量声明,iota增加1
//类似枚举
const (
s4 = iota
s5
s6 = 1
s7 = iota
s8
)
//感兴趣的自行测试一下,输出结果为:0,1,1,3,4
1. iota只能在常量的表达式中使用
2. 每次 const 出现时,都会让 iota 初始化为0
3. 可跳过的值(使用匿名变量)
//简单的测验一下
const (
x = iota
y = 15
z
m
)
const (
a = iota //0
b //1 b = iota
_ //匿名变量,_ = iota
c // c = iota
)
//你都答对了?进阶版
const (
d1, d2 = iota + 1, iota + 2
d3, d4 = iota + 1, iota + 2
)
//没有答案,自己动动小手