黄宽的blog

宁可十年不将军,不可一日不拱卒



常量与运算符

在上一篇博文当中最后一句有讲到,当你需要强制转换一个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

作者  :  黄宽

不耻最后,即使慢,驰而不息,纵会落后,纵令失败



About ME

about me

黄宽

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

友情链接