“In Go, the code does exactly what it says on the page.” – Andrew Gerrand
学go 涨工资,go 的基础类型https://www.zhihu.com/video/1192721876286451712

hello,这次要和大家分享的是 golang 的基础类型,包括bool/整形/浮点数/字符串 等,希望对大家学习 go 有帮助。

Go 变量标识符

给一个 go 变量命名(标识符)的时候,通常使用大骆驼(BigCamel)和小骆驼(smallCamel)命名法,只要保证不和内置的25个关键词冲突就行。 当然 go 也内置了一些自己的标识符,见下图,我建议你最好不要使用这些同名的预定义标识符来命名变量。 只要是非空的字母或者数字(第一个必须是字母),并且不和关键词冲突就是合法的标识符。注意标识符区分大小写,并且在 go 里边只有大写开头的才能导出被其他包使用(后文我们再讨论)。


go 如何声明一个变量

go 中声明一个变量很简单,使用 var 关键字就可以了,声明之后默认使用其类型的零值初始化。 比如int 类型默认是0,字符串就是空串。

:=

Go 的基础类型

无论是学习过程式、面向对象还是并发编程,我们都需要首先学习一门语言的基础类型,对于大部分业务常用编程语言来说就是数值类型和字符串类型。

bool 类型

bool 就是真或者假,一些编程语言使用 0 和非 0 表示。但是 go 里比如 if 语句后边只能是 bool 值或者返回 bool 值的表达式,而不像 c 一样可以使用 int 值。


数值类型(整型和浮点类型)

整数类型

整数类型可以说是我们最常用的一种类型,如果你用 python 的话非常省心(Python3 int 就是大数类,内存够用无需担心溢出),但是 go 里边却有非常多的 int 类型。 对于一门追求性能的语言来说,有些地方可以省内存就省一点。这里需要注意的就是每种类型取值范围,确保不要超范围了。业务中经常使用也就是 int64/int32 了。


当然作为整数,一般常用的那就是加减乘除之类的数学运算了:


浮点数类型

接下来是浮点数,很多场景我们计算的时候都需要有小数点,go 里有两种类型的浮点数。



math 包里很多函数以 float64 作为参数,你可以提前看一下 go 文档看看提供了哪些函数。 浮点数同样也是常见的加减乘除,这里请大家自己编写一些代码来练习,笔者不再赘述。

数值转换小提示

  • 注意不同数值类型之间转换(大转小)可能有截断
  • 可以使用 int(float) 转换一个 浮点数到整数,小数部分会丢弃。但是如果浮点数的值超过了整数类型范围,结果是不可预期的
  • 注意计算机使用二进制不能精确表示 float 数字,当比较两个浮点数时你要格外小心不能用等号直接比较。(通常作差绝对值小于一个很小的阈值)
  • 业务中经常使用 float64,因为 math 函数很多接受 float64 作为参数
  • 你可以通过 math.MaxInt32 类似的定义查看一个类型的最大值

复数类型

复数在常见业务代码中使用比较少,这里就略过了。你可以使用 complex() 来创建复数。

延伸(大整数运算)

某些场景下, 如果64位依然满足不了你,你可以使用大整数 http://big.Int 和 有理数 big.Rat 类型。

字符串

业务中另一个最常用的就是字符串(string)了,web 开发几乎天天就是和字符串打交道。Go的字符串是使用 UTF-8 编码的字符序列,这意味着你可以使用任意国家的语言。 Go 中我们可以使用双引号(")和反引号(`)来创建字符串,区别反引号会忽略转义符,并且可以创建多行字符串。

字符串支持如下操作:


字符串和数值类型的转换

在 Python 里进行这种转换是一件很容易的事情,但是 go 里边可不方便。我列出来以下代码你就知道啦:( 视频中有口误, AtoI 是 Ascii to Integer 的缩写)

常量和变量

常量顾名思义你没法改变它,在一些全局变量中使用 const 会更加安全。常量表达式是在编译期计算。 对于一些被整个模块或者其他模块使用的变量来说,最好定义成 const 防止被意外修改。 比如我们会经常在一些文件开头看到类似 const 定义:

枚举

对于上述这种递增场景,go 还提供了一种更加简洁的方式来定义,使用 iota 表达式,它可以帮助我们完成自增操作(只有这种常见才推荐去使用 iota)

你可以编写代码打印一下看看剩下的值是多少?

小问题:

  • 为什么有 int 还需要 int32 和 int64,业务代码里如何选择呢?
  • 请你尝试打印每种 int 类型的数值范围?

本项目 github 地址:

参考(如果文中有错误,欢迎批评指正):

  • 部分图片来自《Go 语言程序设计》

文章推荐: