在上一篇博文当中最后一句有讲到,当你需要强制转换一个 int 值为一个字符串类型,得到的值会和想象中有些出入。
func main() {
a := 65
var b = string(a)
fmt.Println(b)
}
这里打印出来的是大写字母 A,这是为什么?为什么不是一个值为 65 的字符串?
当你强制转换时,系统会认为你想要得到是 ASCII 表对应的字符串,刚好 65 对应的是大写 A。
如何能够得到一个字符串的65,这就需要再引入一个包了,strconv 包, strconv.Itoa 能够将一个 int 转换为字符串,Atoi则相反。在这里我有些想不明白,Ito 我能想明白,可以理解为 int 转换为某某, a 是字符串的意思?
如何证明 Itoa 真的就将 65 转换成了字符串呢,这里又得引入一个包(php 简直太方便了)。
这个包叫 reflect ,有个方法为 TypeOf ,使用这个方法能检测值类型。
常量,和变量组一样,也可以有常量组,常量的定义在需要在编译的时候就已经可以确定。下面举个例子:
const (
a = "world"
b = len(a)
c = iota
)
const (
d = iota
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
在第一个常量组中,如果你将 a 移除,在全局变量中声明一个 a='world'
,那么你将会得到一个错误,因为他不是一个能够确定的,他是一个变量。
len
函数是字符长度测量,所以b
将会是一个 int 值为 5 。
c 是个计数器,在当前常量组中你声明了多少个常量,这个 iota 就是几,所以 iota 应该为 2 ,如果在第一个常量组中在 c 下面再声明一个 e 常量,而不声明值,那么 e 就会等于上一个已声明的常量,就是 c 。
c 的值是个计数器,所以 e 也等于 iota ,所以 e 就等于 3 。
来到第二常量组,里面只有一个 d 常量,在一个新的常量组里 iota 是从零开始计数的,所以 d 就等于 0 ,最终打印出来的结果为 world , 5 , 2 , 0 。
当然常量应该写为大写,如果不想为外部调用的话,可以在常量命名前加个下划线。
运算符,前几篇博文有写到过运算符的概念,所以这里不再重复,我再看一遍就好了。
原文链接:常量与运算符 golang
有疑问加站长微信联系(非本文作者)