Go语言学习之常量(The way to go)
2024-09-01 15:03:36
生命不止,继续go go go .
上一篇博客《Go语言学习之变量(The way to go)介绍了go中的变量,今天就介绍常量。
const关键字
跟c++中一样,go中同样具有const关键字,来声明常量。
语法是这样的:
const variable type = value;
下面就是简单的常量定义:
const LENGTH int = 10
const WIDTH int = 5
同样可以用块的形式声明一系列常量:
package main
import "fmt"
func main() {
const(
LENGTH int = 10
WIDTH int = 8
)
fmt.Println(LENGTH)
}
结果输出:10
这里你有没有发现一个问题,我们没用使用WIDTH这个常量,但是编译器没有报错。
未使用的常量不会引发编译器错误!!
同样,在声明常量的时候,也可以省略常量的类型,由编译器自动推断:
package main
import "fmt"
const (
Cat = 10
Dog = 20
Bird = 30
)
func main() {
// Use our constants.
fmt.Println(Cat)
fmt.Println(Dog)
fmt.Println(Bird)
}
输出:
10
20
30
另外,需要注意,不能给常量进行重新赋值:
const (
Normal = 1
Medium = 2
)
func main() {
Medium = 3
}
错误:cannot assign to Medium
可以一行声明多个常量:
const name, size = "carrot", 100
不能读取常量的地址:
package main
import "fmt"
var x int = 100
const y int = 200
func main() {
fmt.Println(&x, x)
fmt.Println(&y, y)
}
错误:cannot take the address of y
iota关键字
C++中我们使用enum关键字来定义枚举,但是在go中没有这个关键字,但是为我们提供iota关键字。
iota是优雅的自增量!!!!
this is an enumerator for const creation. The Go compiler starts iota at 0 and increments it by one for each following constant. We can use it in expressions.
直接看看代码:
package main
import "fmt"
const (
Low = 5 * iota
Medium
High
)
func main() {
// Use our iota constants.
fmt.Println(Low)
fmt.Println(Medium)
fmt.Println(High)
}
输出:
0
5
10
如果中断iota,必须显示恢复:
package main
import "fmt"
const (
Low = iota
Medium
High = 100
Super
Band = iota
)
func main() {
// Use our iota constants.
fmt.Println(Low)
fmt.Println(Medium)
fmt.Println(High)
fmt.Println(Super)
fmt.Println(Band)
}
输出:
0
1
100
100
4
最新文章
- redux middleware 的理解
- UIAlertController警告视图和操作表单
- LeetCode: 3_Longest Substring Without Repeating Characters | 求没有重复字符的最长子串的长度 | Medium
- java获取Json和http状态码
- silverlight 画图InkPresenter
- IOS 文件管理 2
- 如何用 new 来动态开辟一个二维数组
- html2canvas页面截图图片不显示
- Mahout推荐算法之SlopOne
- SpringBoot 添加mybatis generator 自动生成代码插件
- DLLHijack漏洞原理
- C# 之 GUID格式化
- linux shell中如何往所有行尾添加内容
- 用rz、sz命令在Xshell传输文件
- #ifndef详解
- node跨域cors模块,nodejs+express跨域
- 并发 ---- 6. IO 多路复用
- zabbix 监控报警详细邮件内容
- TPM及TSS协议栈的安装使用
- editplus教程
热门文章
- (转)使用 python Matplotlib 库绘图
- 第十篇:顺序容器vector,deque,list的选用规则
- IE的文档模式, 及Textarea呈现bug一例
- JavaScript进阶之路 初学者的开始
- 【BZOJ4631】踩气球 链表+线段树+堆
- xmpp muc 群聊协议 4
- java注解类定时器
- delphi----Tstringlist,将有符号的数据变成数组";aaa,bbb,ccc";---->;list[0]=aaa,list[1]=bbb
- office 2010 自动连接网络打印机的问题(保存或者打开极慢) 解决方法
- IO流入门-第三章-FileInputStream_FileOutputStream复制