从零学 Go:原生数据类型

简介: 原生数据类型

前面一篇文章介绍了 Go 基本语法,变量的声明与初始化。本文将会具体介绍 Go 原生数据类型。Go 语言中具备丰富的数据类型,基本类型有整型、浮点数、布尔型、字符串型等,除此之外,还有切片、结构体、指针、通道、map、数组等其他类型。

原生数据类型

本文中我们主要介绍 Golang 的基础类型。 整型中主要有两大类,分别是:

  • 按照整型的长度划分:int8、int16、int32、int64
  • 按照有无符号划分:uint8、uint16、uint32、uint64

除此之外,Golang 中还提供了平台自匹配长度的 intuint 类型。 整型类型之间可以相互转换,高长度类型向低长度类型转换会发生长度截取,仅会保留高长度类型的低位值,造成转换错误,实际使用需要注意。如下例子所示:

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+38
  • float64,最大范围为 1.797693134862315708145274237317043567981e+308

打印浮点型精度与 C 语言一致,可以配合 %f 使用,如下例子所示:

fmt.Printf("%f\n", math.E)  //按照默认宽度和精度输出
fmt.Printf("%.2f\n", math.E) //按照默认宽度和 2 位精度输出

float32 和 float64 之间也可以进行类型转换,仍然需要注意转换期间精度的损失。

Golang 的布尔型即我们常见的 truefasle。与 C 语言不同,Golang 的布尔型不可与整型进行强转,也无法参与数值运算。

在 Golang 中,字符串型以原生数据类型出现,地位等价于其他的基本类型(整型、布尔型等),它基于 UTF-8 编码实现,所以在遍历字符串型时,我们需要区分 byterune

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求索


目录
相关文章
|
17天前
|
Go
go语言中的数据类型
go语言中的数据类型
13 0
|
1月前
|
Go
Go的数据类型
Go的数据类型
14 0
|
2月前
|
存储 Go
Go基本数据类型
主要介绍GO语言的基本数据类型
23 2
|
4月前
|
JSON JavaScript Go
Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
掌握 Go 语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解 Go 基础知识的好起点是查阅 Go 官方文档
459 2
|
6月前
|
Go
Go 语言学习之基础数据类型
Go 语言学习之基础数据类型
42 0
|
6月前
|
存储 JSON Go
Go语言学习 - RPC篇:深入gRPC-Gateway-探索常用数据类型
今天,我们先迈出第一步:探索RPC服务中的数据类型。掌握常见的数据类型,灵活地运用到接口设计中,能帮助我们快速地提供优雅的接口类服务。
45 0
|
23天前
|
存储 安全 Go
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
|
1天前
|
SQL 关系型数据库 MySQL
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
|
3天前
|
Go
Golang深入浅出之-Go数据类型详解:整型、浮点型与布尔型
【4月更文挑战第20天】Go语言基础数据类型包括整型(有符号和无符号,如`int8`、`uint32`)、浮点型(`float32`、`float64`)和布尔型(`true`、`false`)。理解它们的范围和特性,以及注意溢出、精度损失、类型转换等问题,是编写高效Go代码的关键。例如,整型溢出可能导致模运算,浮点数比较可能有精度误差,布尔型不应用于数值计算。了解这些易错点,能帮助写出更健壮的代码。
17 0
|
2月前
|
存储 算法 Go
Go语言高级数据类型详解
【2月更文挑战第2天】Go语言除了基础数据类型和引用类型外,还提供了一些高级数据类型,这些类型在特定场景下非常有用。本文将深入探讨Go语言中的高级数据类型,包括指针、自定义类型、匿名类型、结构体嵌入、接口嵌入和可变参数函数,帮助读者更全面地理解并掌握这些高级特性。