go语言简介.md
Go 的优势
- Go 的并发设计更优秀,并且规模上运行良好。
- 统一了标准代码格式,可读性更强。
- GC 明显比 Java 和 Python 更有效。
Go 的数据类型
基础有三种
- 布尔
- 数字
- 字符串
派生类型
- 指针
- 函数
- 结构体
- 接口
- 数组
- 切片
- Channel
- Map
内建函数 new 函数
1 |
|
- 使用 new 分配内存,返回指针。
- new 函数返回的指针指向的内存是未初始化,需手动初始化。
数组和切片
数组是固定长度的、同构(即元素类型相同)的数据结构,用于存储有序的数据集合。
切片是动态长度的、同构的轻量级数据结构,用于对底层数组的一个连续片段进行操作。切片本质上是对数组的一种抽象视图,由指向底层数组的指针、长度和容量构成。切片的长度和容量可以动态变化,提供了更为灵活的集合操作。
1 |
|
- 数组固定长度,切片可以动态改变长度。
- 数组是值类型,赋值或传参时会复制整个数组,切片是引用类型,赋值或传参时只复制指针、长度、容量。
Map
Map 是一种无序的键值对集合,用于存储键值对数据。底层实现是一个散列表,因此实现 Map 的过程实际上就是实现散表的过程。主要出现的结构体有两个,一个叫 hmap(a
header for a go map),一个叫 bmap(a bucket for a Go map,通常叫其
bucket)。
1 |
|
channel 概念和特性
channel 是通道,基础使用为
1 |
|
channel特性
- 给 nil 的 channel 发送数据会永远阻塞。
- 给 nil 的 channel 接收数据也会永远阻塞。
- 已经关闭的 channel 发送数据会 panic 。
- 已经关闭的通道进行接收会一直获取值直到通道缓冲区为空。
- 已经关闭的 channel 接收数据,如果缓冲区为空,会返回零值。
- 关闭已经关闭的 channel 会 panic 。
channel 的缓冲区
缓冲区为 0 的 channel 是无缓冲的。
1 |
|
- 无缓冲区的 channel 的发送和接收都是阻塞的,发送依赖接收。
- 有缓冲区的 channel 的发送和接收都是非阻塞的,发送和接收是互不影响的。
- 有缓冲区的 channel 已经满了,再发送会阻塞。
go语言简介.md
https://abrance.github.io/2024/09/20/mdstorage/project/short_media/架构师/go语言简介/