Map
01.Map 01.map底层 [参考(opens new window)](https://www.bookstack.cn/read/qcrao-Go-Questions/map-map 的扩容过程是怎样的.md) 1.1 map底层浅析 笼统的来说,go的map底层是一个hash表,通过键值对进行映射 键通过哈希函数生成哈希值,然后go底层的map数据结构就存储相应的hash值,进行索引,最终是在底层使用的数组存储key,和value 稍微详细的说,就设计到go map 的结构:hmap 和bmap 1.2 Hash函数 哈希函数会将传入的key值进行哈希运算,得到一个唯一的值。 go语言把生成的哈希值一分为二,比如一个key经过哈希函数,生成的哈希值为:8423452987653321,go语言会这它拆分为84234529,和87653321。 那么,前半部分就叫做 高位哈希值 ,后半部分就叫做 低位哈希值 。 **高位哈希值:**是用来确定当前的bucket(桶)有没有所存储的数据的。 **低位哈希值:**是用来确定,当前的数据存在了哪个bucke...
字符串
1.字符串 01.字符串底层 1.1 字符串底层结构 一个字符串是一个不可改变的字节序列,字符串通常是用来包含人类可读的文本数据。 和数组不同的是,字符串的元素不可修改,是一个只读的字节数组。 每个字符串的长度虽然也是固定的,但是字符串的长度并不是字符串类型的一部分。 Go语言字符串的底层结构在 reflect.StringHeader 中定义 1234type StringHeader struct { Data uintptr Len int} 字符串结构由两个信息组成 第一个是字符串指向的底层字节数组 第二个是字符串的字节的长度 而slice 包含一个数据指针、一个长度和一个容量,当容量不够时会重新申请新的内存,Data 指针将指向新的地址,原来的地址空间将被释放 字符串其实是一个结构体,因此字符串的赋值操作也就是 reflect.StringHeader 结构体的复制过程,并不会涉及底层字节数组的复制。 我们可以看看字符串“Hello, world”本身对应的内存结构: 字符串虽然不是切片,但是支持切片操作,不同位置的切片底层也访问的...
go mod包管理工具
1.go mod包管理工具 01.Golang 中包的介绍和定义 包(package)是多个 Go 源码的集合,是一种高级的代码复用方案 Go 语言为我们提供了很多内置包,如 fmt、strconv、strings、sort、errors、time、encoding/json、os、io 等。 Golang 中的包可以分为三种:1、系统内置包 2、自定义包 3、第三方包 1、系统内置包 fmt、strconv、strings、sort、errors、time、encoding/json、os、io 等 2、自定义包 开发者自己写的包 3、第三方包 属于自定义包的一种,需要下载安装到本地后才可以使用 如前面给大家介绍的"github.com/shopspring/decimal"包解决 float 精度丢失问题 02.Golang包管理工具go mod 在 Golang1.11 版本之前如果我们要自定义包的话必须把项目放在 GOPATH 目录。 Go1.11 版本之后无需手动配置环境变量,使用 go mod 管理项目 也不需要非得把...
流程控制
1.流程控制 01.if else(分支结构) 1.1 if 条件判断基本写法 1234567891011121314package mainimport ( "fmt")func main() { score := 65 if score >= 90 { fmt.Println("A") } else if score > 75 { fmt.Println("B") } else { fmt.Println("C") }} 1.2 if 条件判断特殊写法 if 条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断 1234567891011121314package mainimport "fmt"func main() { //这里的 score 是局部作用域 if score := 56; score >= 90 ...
interface接口
1.interface接口 01.Golang接口的定义 1.1 Golang 中的接口 在Go语言中接口(interface)是一种类型,一种抽象的类型。 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。 实现接口的条件 一个对象只要全部实现了接口中的方法,那么就实现了这个接口。 换句话说,接口就是一个需要实现的方法列表。 1.2 定义一个Usber接口 定义一个 Usber 接口让 Phone 和 Camera 结构体实现这个接口 123456789101112131415161718192021222324252627282930313233343536package mainimport "fmt"//1.接口是一个规范type Usber interface { start() stop()}//2.如果接口里面有方法的话,必要要通过结构体或者通过自定义类型实现这个接口type Phone struct { Name string}//3.手机要...