前面一篇文章介绍了 Go 基本语法 变量的声明与初始化。本文将会具体介绍 Go 原生数据类型。Go 语言中具备丰富的数据类型 基本类型有整型、浮点数、布尔型、字符串型等 除此之外 还有切片、结构体、指针、通道、map、数组等其他类型。
原生数据类型本文中我们主要介绍 Golang 的基础类型。 整型中主要有两大类 分别是
按照整型的长度划分 int8、int16、int32、int64按照有无符号划分 uint8、uint16、uint32、uint64除此之外 Golang 中还提供了平台自匹配长度的 int 和 uint 类型。 整型类型之间可以相互转换 高长度类型向低长度类型转换会发生长度截取 仅会保留高长度类型的低位值 造成转换错误 实际使用需要注意。如下例子所示
var e uint16 math.MaxUint8 1 fmt.Printf( e valud(unit16) is %v\n , e) var d uint8(e) fmt.Printf( d valud(unit8) is %v\n , d)
输出如下所示
e valud(unit16) is 256 d valud(unit8) is 0
因为 256 在 uint16 底层的存储方式为 00000001 00000000 转换为 uint8 之后 只截取后 8 位 导致 d 变为 00000000 即 0。
浮点型主要有两种
float32 最大范围位为 3.40282346638528859811704183484516925440e 38float64 最大范围为 1.797693134862315708145274237317043567981e 308打印浮点型精度与 C 语言一致 可以配合 %f 使用 如下例子所示
fmt.Printf( %f\n , math.E) //按照默认宽度和精度输出 fmt.Printf( %.2f\n , math.E) //按照默认宽度和 2 位精度输出
float32 和 float64 之间也可以进行类型转换 仍然需要注意转换期间精度的损失。
Golang 的布尔型即我们常见的 true 和 fasle。与 C 语言不同 Golang 的布尔型不可与整型进行强转 也无法参与数值运算。
在 Golang 中 字符串型以原生数据类型出现 地位等价于其他的基本类型(整型、布尔型等) 它基于 UTF-8 编码实现 所以在遍历字符串型时 我们需要区分 byte 和 rune。
f : Golang 编程 fmt.Printf( byte len of f is %v\n , len(f)) fmt.Printf( rune len of f is %v\n , utf8.RuneCountInString(f))
上述例子的输出为
byte len of f is 12 rune len of f is 8
第一种方式 统计的是 byte 的长度 它的类型为 uint8 代表了一个 ASCII 字符。第二种方式统计的是 rune 类型 它的类型为 int32 代表了一个 UTF-8 字符 它可以类比为 Java 中的 char 类型。由于中文字符在 UTF-8 中占用了 3 个字节 所以使用 len 方法时获得的中文字符的长度为 6 个 byte 而 utf8.RuneCountInString() 方法统计的是字符串的 Unicode 字符数量。
在遍历字符串的每个字节时 我们可以采用以下手段
f : Golang 编程 //按字节遍历字符串 for _, g : range []byte(f){ fmt.Printf( %c , g) }
输出的结果为
Golang????¨
在进行字节遍历时候 因为中文字符的 Unicode 字符会被截断 导致中文字符输出乱码。为了保证每个字符正常输出 可以通过遍历 rune 的方式遍历字符串中的每个字符 如下所示
//按字符遍历字符串 for _, h : range f{ fmt.Printf( %c , h) }
此时输出的结果就是我们期望的 Golang 编程 字符串。
小结本文主要介绍了 Go 语言的几种常用的数据类型 对于学习一门语言来说 数据类型是非常基于且必须要会的内容。特别是常用的整型、浮点数、布尔型、字符串型等。下面的文章 我们将介绍指针在 go 语言中的使用。
阅读最新文章 关注公众号 aoho求索
专属主机控制台页面可以看到每台专属主机的总资源和可用资源。例如:deh-3cdd专...
Svelte是一个轻量级的基于组件的框架,比如React、Vue或Angular也都是,它允许开...
手游安全风险项 风险解释 风险等级 服务器宕机 破坏服务器进程或造成异常,停止...
文章简介 本文将通过理论+实践的方式从头到尾总结Redis中的哨兵机制。文章内容 ...
TOP云 (west.cn)5月16日消息,近日又一个新顶级 域名 ?.richardli正式在互联网...
作者 | 许晓斌 来源 | 阿里巴巴云原生公众号 写作动机 我们为何写作?对于许多技...
日前, SAP发布了2020年第四季度和年度财报,以及本季度主要新签单及上线大中华...
作者:清弦 阿里云技术专家,主要负责 ACK 容器网络设计与研发,阿里云开源 CNI ...
云手机重置指将云手机的操作系统恢复到初始状态,云手机产生的所有数据也会被删...
环境:SpringBoot2.3.8.RELEASE + JDK1.8 本文教你如何在SpringBoot环境下使得自...