Go语言

A collection of 5 posts
Golang——Channel
Go语言

Golang——Channel

大家好,这里是编程Cookbook。本文详细介绍Golang的数据类型channel,包括基本概念,源码,常见问题及其解决并发。 基本概念 定义 * Channel 是 Go 语言中用于实现协程(goroutine)之间通信的核心机制。通过 channel,可以在协程之间通过数据传递实现同步。Go 的并发编程依赖 CSP(Communicating Sequential Processes)模型,强调“通过通信共享内存,而不是通过共享内存来通信”。 优势 Goroutine 解放了程序员,让我们更能贴近业务去思考问题。而不用考虑各种像线程库、线程开销、线程调度等等这些繁琐的底层问题,goroutine 天生替你解决好了。channel 的灵活性和扩展能力使其成为 Go 并发编程的核心工具,而非单纯的同步机制。 * Channel 的组合能力: channel 可以将多个 goroutine 的结果汇集到一个统一的 channel 中,主协程可以从这个
17 min read
Golang——rune和byte
Go语言

Golang——rune和byte

大家好,这里是编程Cookbook。本文详细介绍Golang中的两种字符类型rune和byte,介绍他们的区别,编码方式和简单的使用。 在Go语言中,rune和byte都是表示单个字符的类型,但它们有一些关键的区别。 byte 类型 byte 是 uint8 的别名,即一个 8 位无符号整数,表示一个字节,范围是 0 到 255。 * byte 用于表示 UTF-8 编码中的 字节,适合处理字节流和 ASCII 字符。 字符占用字节数: * ASCII 字符(0-127)占用 1 字节。 * 常见的字符,如拉丁字母、标点符号,占用 1 字节。 * 中文等非 ASCII 字符会占用 3 字节。 byte 表示:
7 min read
Golang——hashmap
Go语言

Golang——hashmap

大家好,这里是编程Cookbook。本文详细介绍golang的哈希表的底层实现、扩容机制、插入查询过程以及并发安全性。 定义 字典(Map)类型其实是哈希表(Hash Table)的一个实现。字典用于存储键-值对的无序集合。 Key无序性 为什么 map 的 key 无序? 1. 扩容后键重新分布:键值对的存储位置随着扩容发生显著变化。 2. 随机化遍历起点:遍历时从随机 bucket 和随机 cell 开始,避免返回固定顺序。 3. 防止误解:杜绝程序员误以为 map 有固定的遍历顺序,避免潜在错误。 4. 语言特性:从 Go 1.0 起就设计为无序,以保持哈希表特性的一致性。 Key唯一性 注意: 同一个字典中的每个键都是唯一的。如果我们在向字典中放入一个键值对的时候其中已经有相同的键的话,那么与此键关联的那个值会被新值替换。 Key可比性
14 min read
Golang——切片与数组
Go语言

Golang——切片与数组

大家好,这里是编程Cookbook。本文详细介绍Golang的切片与数组,包括他们的联系,区别,底层实现和使用注意事项等。 数组与切片的异同 相同之处 * 集合类型:数组和切片均属于集合类类型,其值均可用于存储某一种类型的元素。 * 内存布局:在内存中,数组和切片的元素存储是连续分配的。 * 访问方式:两者都可以通过下标来访问单个元素。 区别 * 数组: * 数组的长度是固定的,必须在声明时指定,且之后无法改变。 * 数组的长度是其类型的一部分,例如 [3]int 和 [4]int 是不同的类型。 * 由于长度固定,数组在实际开发中使用较少。 * 切片: * 切片更加灵活,是数组的封装和增强。 * 切片的长度可变,其类型字面量中只有元素类型,没有长度(可通过 make 函数初始化时指定长度和容量)。 * 切片的长度可随着添加元素而动态增长,但不会因移除元素而减少(直到没有引用时垃圾回收机制才会释放)。 切
9 min read
Golang——语言基础知识
Go语言

Golang——语言基础知识

大家好,这里是编程Cookbook。本文详细介绍Go语言的基础知识,包括数据类型,深浅拷贝,编程范式,Go语言是一种静态(静态类型语言 和 静态语言)强类型、编译型、并发型,并具有垃圾回收功能的编程语言。 1. Go 语言基础知识 下面将详细介绍 Go 语言的理论知识,包括数据类型、深拷贝与浅拷贝、以及如何在函数中传递数据。 数据类型 Go 语言是强类型的,意味着变量在使用时必须明确指定类型。Go 语言有很多内建的数据类型,主要可以分为以下几类: 基本数据类型 * 布尔类型(bool):表示真(true)或假(false)。 * 数字类型: * 整数:int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64。 * 浮点数:
20 min read