go语言数据结构分为哪几类
来源:亿速云
时间:2023-03-02 19:57:39 244浏览 收藏
亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《go语言数据结构分为哪几类》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下go语言,希望所有认真读完的童鞋们,都有实质性的提高。
这篇文章主要介绍“go语言数据结构分为哪几类”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言数据结构分为哪几类”文章能帮助大家解决问题。
go语言数据结构有四大类:1、基础类型,包括整型(有符号和无符号整数)、浮点数、复数、字符串(由不可变的字节序列构成)、布尔值(只有true和false两个值);2、聚合类型,包括数组、结构体(是由任意个任意类型的变量组合在一起的数据类型);3、引用类型,包括指针、slice(是一个拥有相同元素的可变长度序列)、map、function、channel;4、接口类型。
每一门语言都有自己的数据结构,Go 语言也不例外,总共有四大类,基础类型、聚合类型、引用类型和接口类型。
1. 基础类型
整型
Go 的整型分为有符号和无符号整数。
有符号整数会分成 int8、int16、int32、int64
无符号整数会分成 uint8、uint16、uint32、uint64
但通常会直接使用 int 和 uint,因为这两种类型会根据平台的特性,自动转成运算效率最高的类型,现在 32 位以下的计算机一级很少见了,所以 int 通常是 32 或者 64位,但具体要根据平台和编译器决定。
int 是目前使用最广泛的数值类型,在需要明确指定数值位数的时候,直接使用 int 就可以。
通常来说,有符号的整数就够用,无符号整数只有在位运算或者特定算数的时候才会使用。
uintptr 和 rune 是两类特殊的数字类型,uintptr 大小不明确,用来存储指针,主要用于底层编程,比如用于 Go 语言与 C 语言的交互。
如果两个值可以使用 == 和 != 进行比较,说明这个两个值是可比较的。
整数是可比较的。
其他数字类型
除了整型数据之外,Go 语言中,还有两种数据类型:浮点数和复数。
浮点数有 float32 和 float64 两种类型,浮点数一般使用指数表示法,使用 e 或者 E 来表示。
float32 的正数范围是 1.4e-45 ~ 3.4e38
float64 的正数范围是 4.9e-324 ~ 1.8e308
在 10 进制下,float64 的有效数字是 15 位,远远超过了 float32 的 5 位,如果没有特殊的情况,应该优先使用 float64。
复数也有两种 complex64 和 complex128,这两种类型分别由 float32 和 float64 构成。math/cmplx
库提供了复数运算所需要的函数。
浮点数和复数都是可比较的。
字符串
字符串可是说是最常用的数据类型。字符串由不可变的字节序列([]byte)构成,字符串的内容通常会用 UTF-8 的编码格式处理,这点在上一篇文章中已经详细的说明过了。
Go 的字符串内容是不可变的,对当前字符串做的操作都会生成一个新的字符串。Go 字符串天然支持 UTF-8,而且习惯上也会优先使用这种编码方式,乱码的烦恼会少一些。
Go 语言也为字符串提供了丰富的类库:
bytes:用于操作字节slice([]byte),如果需要对字符串进行频繁的修改, 使用 byte.Buffer 会高效
strings:用于搜索、替换等等字符传操作
strconv:主要用于字符串和其他基本数据类型之间的转换
unicode:用来判断字符的特性,比如是否是数字、是否大写等等
字符串是可比较的。
布尔值
布尔值相对来说比较简单,只有两个值: true
和 false
。可以使用 ! 符号来进行取反运算,!true 就是 false。
也可以使用 && 和 || 来进行组合运算,在组合运算中,也会遵循短路行为,短路行为是指左边如果能直接确定最后的结果,那么后面的计算将不会进行,如下:
var i = 1 // i 0 || i布尔值是可比较的。
2. 聚合类型
聚合类型的值由内存中的一组变量构成。数组和结构体都是聚合类型,数组和结构体的长度都是固定的。数组中的的元素类型必须都相同,而结构体中的元素可以不同。
数组
数组是一个长度固定,拥有0 个或多个(不超过数组长度)相同数据类型的序列。数组在声明的时候必须指定长度,可以使用常量,但是不能使用变量。
实际上,我们很少在代码中直接使用数组,数组在绝大部分的时候都是做为 slice 的底层存储,并不会直接使用。
数组的可比较性取决于元素的可比较性,如果元素是可比较的,那么数组也是可比较的,反之亦然。
结构体
结构体是由任意个任意类型的变量组合在一起的数据类型,和其他语言中类的概念相似。
type Student struct { Name string age int }Go 语言是一个面向对象的语言,但却又抛弃了 Java 中类和对象的概念,结构体是 Go 语言实现面向对象的基础之一,还有一部分是接口,下面会聊到。
在 Go 的面向对象中,已经摈弃了继承的概念,但在结构体中,通过结构体嵌套,也算是实现了部分继承的功能。
结构体的可比较性也取决于其中变量的可比较性。
3. 引用类型
引用是另外一种数据类型,很多 Go 语言的高级功能都依赖引用。引用都间接指向变量或者状态,通过引用来操作数据会让该数据的全部引用都受影响。
指针
指针是一种数据类型,指针的值是一个变量的地址。对于一个变量来说,可以有多个指针,通过其中任意一个指针来修改数据,通过其他指针也会获取到最新修改的值。
i := 1 p1 := &i p2 := &i *p1 = 2 fmt.Println(*p2) // 2指针是可比较的。
slice
slice 是一个拥有相同元素的可变长度序列。 slice 看起来与数组很像,但本质上不同。
slice 依赖数组,没有数组,就没有 slice。
一个 slice 有三个属性,指针,长度和容量。其中指针指向数组中的某个元素(不一定是第一个),这是 slice 可以访问的第一个元素。
长度是 slice 中元素的个数,不能超过容量,容量通常是指 slice 指针的位置,到底层数组的最后一个元素的位置的长度。
slice 不可比较, 只能和 nil 比较。
map
map 是散列表的引用。
map 的使用很简单,但是需要注意一点,map 的 key 必须是可比较的,如果 key 不可比较,那就无法通过 key 查询到响应的 value,value 的类型是没有限制的,可以是任意值。
map 不可比较,只能和 nil 比较。
function
function 就是函数,在写 Go 的 helloworld 程序时,就会用到函数。 函数也是一种引用类型。
function 本身不可比,只能和 nil 比较,但是可以通过反射获取函数指针进行比较。
channel
Go 语言天然支持搞并发。而 channel 就是其中关键一环,goroutine 用来并发执行任务。而 channel 则用来连接不同的 goroutine。channel 也是属于引用类型。
channel 是可比较的。
4. 接口类型
Go 语言中还有一个类型是接口类型。
接口是 Go 实现面向对象的关键。Go 的接口类型很特别,你不需要去显示的实现一个接口,只要把接口中的方法实现,就默认实现了这个接口。
接口类型是可比较的。
关于“go语言数据结构分为哪几类”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注golang学习网行业资讯频道,小编每天都会为大家更新不同的知识点。
今天带大家了解了go语言的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
-
185 收藏
-
460 收藏
-
430 收藏
-
450 收藏
-
320 收藏
-
290 收藏
-
239 收藏
-
381 收藏
-
168 收藏
-
500 收藏
-
355 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习