程序员

从零学 Go:原生数据类型

作者:admin 2021-06-17 我要评论

前面一篇文章介绍了 Go 基本语法 变量的声明与初始化。本文将会具体介绍 Go 原生数据类型。Go 语言中具备丰富的数据类型 基本类型有整型、浮点数、布尔型、字符...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

前面一篇文章介绍了 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求索



本文转自网络,原文链接:https://developer.aliyun.com/article/784769

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 阿里巴巴DevOps实践指南(八)| 以特性

    阿里巴巴DevOps实践指南(八)| 以特性

  • 阿里巴巴DevOps实践指南(五)| 业务驱

    阿里巴巴DevOps实践指南(五)| 业务驱

  • RISC-V工具链简介

    RISC-V工具链简介

  • 变局时代:RISC-V处理器架构的技术演变

    变局时代:RISC-V处理器架构的技术演变

腾讯云代理商
海外云服务器