Go 语言入门指南:基础语法和常用特性解析2 | 青训营

80 阅读4分钟

此篇文章是我参与 #青训营笔记创作活动 的第10篇笔记

主要是简单记录一下自己在学习Go语言基础语法中的变量部分时遇到的一些小要点,

只是个人的一个学习记录,水平不高还望大佬们包容。


0x01 整数类型

Go语言同时提供了有符号和无符号的整数类型,其中包括 int8、int16、int32 和 int64 四种大小截然不同的有符号整数类型,分别对应 8、16、32、64 bit(二进制位)大小的有符号整数,与此对应的是 uint8、uint16、uint32 和 uint64 四种无符号整数类型。

此外还有两种整数类型 int 和 uint,它们分别对应特定 CPU 平台的字长(机器字大小),其中 int 表示有符号整数,应用最为广泛,uint 表示无符号整数。实际开发中由于编译器和计算机硬件的不同,int 和 uint 所能表示的整数大小会在 32bit 或 64bit 之间变化。

与C、C++等其他语言相类似的整数类型,赶时间的话稍微看一下过一遍就OK了。

当然啦,知道go语言帮我们在不同场合即需要下设置了许多的整数类也是很有用的。我们知道无论是有符号整数亦或是无符号整数,它们都有各种不同的大小的类型可供选择,而不同大小又会影响它们自身的取值范围以及内存占用,go语言在一开始就提供了众多的整数类型,可以方便我们在代码中更好地选择最合适的大小的整型变量。

下表为部分整数类型的取值范围及内存用情况:

类型取值范围内存占用情况
int8-128至1278位(1字节
uint80至2558位(1字节
int1632768至3276716位(2字节
uint160至6553516位(2字节
int32-2147 483 648至2147 483 64732位(4字节
uint320至4 294 967 29532位(4字节
int64-9 223 372 036 854 775 808至9 223 372 036 854775 80764位(8字节)
uint640至18 446744073 709 551 61564位(8字节)

0x02 浮点类型

Go语言提供了两种精度的浮点数 float32 和 float64,它们的算术规范由 IEEE754 浮点数国际标准定义,该浮点数规范被所有现代的 CPU 支持。

这些浮点数类型的取值范围可以从很小到很大:

  • float32 能取到的最大值大约是 3.4e38,最小值大约是 1.4e-45
  • float64 能取到的最大值大约是 1.8e308,最小值大约是 1.4e-45 和 4.9e-324
  • 一个 float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十进制数的精度
  • 通常应该优先使用 float64 类型,因为 float32 类型的累计计算误差很容易扩散,并且 float32 能精确表示的正整数并不是很大

0x03 复数类型

  • 在计算机中,复数是由两个浮点数表示的,其中一个表示实部,一个表示虚部。

  • Go语言中复数的类型有两种

    • complex128(64 位实数和虚数)
    • complex64(32 位实数和虚数)
  • 其中 complex128 为复数的默认类型

声明复数的语法格式如下所示:

var name complex128 = complex(x, y)
  • name 为复数的变量名

  • complex128 为复数的类型

  • “=”后面的 complex 为Go语言的内置函数用于为复数赋

  • x、y 分别表示构成该复数的两个 float64 类型的数值

    • x 为实部
    • y 为虚部

也可以简写为:

name := complex(x, y)
  • 对于一个复数z := complex(x, y),可以通过Go语言的内置函数real(z)来获得该复数的实部(x)通过imag(z)获得该复数的虚部(y)

0x04 bool类型

基本和其他高级语言差不多,不过需要注意:

  • Go语言中不允许将整型强制转换为布尔型

  • 布尔值也不会隐式转换为数字值 0 或 1,反之亦然,必须使用 if 语句显式的进行转换

    • i := 0
      if b {
          i = 1
      }
      

附录

本文参考链接及推荐阅读:

Go 语言基础语法 | 菜鸟教程 (runoob.com)

Go语言基本语法 (biancheng.net)