美文网首页程序员
Go语言实战(三) - 内置容器

Go语言实战(三) - 内置容器

作者: JavaEdge | 来源:发表于2019-04-30 19:53 被阅读19次

本节我们来学习数组,切片,Map和字符串。
在Go语言中,我们一般不直接使用数组,而是使用切片来管理线性表结构,它的语法类似python的list,不过更强大哦。
当然,Map和字符串的学习也是必不可少。
掌握至此,我们就可以写一些简单的算法了,刷刷leetcode不在话下,我们就来试一试吧!

1 数组

数组是单一类型元素的编号序列,该单一类型称为元素类型。元素的数量称为长度且为非负数。

数组类型 = "[" 数组长度 "]" 元素类型 .
数组长度 = 表达式 .
元素类型 = 类型 .

长度是数组类型的一部分,其求值结果必须可表示为 int 类型的非负
数组 a 的长度可使用内建函数 [len]获取, 其元素可通过整数[下标]0 到 len(a)-1 寻址
数组类型总是一维的,但可组合构成多维的类型。

[32]byte
[2*N] struct { x, y int32 }
[1000]*float64
[3][5]int
[2][2][2]float64  // 等价于[2]([2]([2]float64))

构造数组


运行结果

遍历

  • 首先想到这样


  • 但是通常使用 range关键字遍历



  • 为什么要用 range


数组是值类型



运行结果

要想传递引用可修改数组,可传指针参数


2 切片的概念

切片是数组连续段的引用及包含此数组的元素的编号序列。
切片类型表示元素类型为数组的所有切片的集。
未初始化切片的值为 nil。

切片类型 = "[" "]" 元素类型 .

类似于数组,切片是可索引的且拥有一个长度
切片 s 的长度可通过内建函数 [len]获取;不同于数组的是,切片可在执行过程中被改变, 其元素可通过整数(§[下标]) 0 到 len(s)-1 寻址。 给定元素的切片下标可能小于它在其基本数组中的下标。

切片一旦初始化,就总是伴随着一个包含其元素的基本数组。
因此,切片与其数组及其它本数组的切片共享存储
与此相反,不同的数组总是表示其不同的存储

切片的基本数组可扩展其切片的结尾

  • 容量 : 该扩展的量度
    它是切片的长度和切片往后数组的长度之和;长度达到其容量的切片可通过从原切片 (§Slices)‘切下’一个新的来创建。 切片 a 的容量可使用内建函数 cap(a) 获取。

给定元素类型 T 的一个新的,已初始化的切片值使用内建函数 make创建, 它需要一个切片类型和指定其长度与可选容量的形参:

make([]T, length)
make([]T, length, capacity)

调用 make将分配一个被返回的切片值所引用的,新的、隐藏的数组。即,执行

make([]T, length, capacity)

产生切片与分配数组后再对其进行切片相同,因此这两个例子的结果为相同的切片:

make([]int, 50, 100)
new([100]int)[0:50]

类似于数组,切片总是一维的,但可组合构造更高维的对象
元素为数组的数组,根据其构造,其内部数组的长度始终相同
然而元素为切片的切片(或元素为数组的切片),其长度会动态地改变
此外,其内部的切片必须单独地(通过 make)分配

基本定义



运行结果

运行可修改

相关文章

  • Go语言实战(三) - 内置容器

    本节我们来学习数组,切片,Map和字符串。在Go语言中,我们一般不直接使用数组,而是使用切片来管理线性表结构,它的...

  • Go语言实战(三)- 内建容器

    1 数组 构造数组

  • GO语言容器

    //GO语言容器 /***********************************************...

  • 内存泄露

    内存泄露 实战 实战Go内存泄露 - Go语言实战 - SegmentFault 思否 总结 pprof工具 使用...

  • go学习计划 2018-07-13

    go语言入门及实战 go web开发 go源码及项目阅读

  • 并发编程

    学习来源:Go语言实战、blibli 黑马程序员 20小时快速入门go语言(中) Go语言的优势 Go语言设计简单...

  • Grequests 库的使用

    Golang:Grequests 库的使用 Go 语言版本的 request Go 语言内置的请求库 net/ht...

  • Go语言内置的net/http

    Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。 net/http介绍Go语言内置...

  • Go 语言极速入门

    本系列文章主要是记录《Go 语言实战》和《Google 资深工程师深度讲解 Go 语言》的学习笔记。 Go 语言极...

  • go语言容器

    数组var arr [3]int // 数组的每个元素都会被初始化为改类型的零值var a [3]int = [3...

网友评论

    本文标题:Go语言实战(三) - 内置容器

    本文链接:https://www.haomeiwen.com/subject/evcbnqtx.html