常量与运算符 golang

与子笑 · · 349 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:与子笑

查看原文:常量与运算符 golang

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

349 次点击  ∙  1 赞  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传