Study notes
通道的高级玩法 通道的高级玩法
我们已经讨论过了通道的基本操作以及背后的规则。今天,我再来讲讲通道的高级玩法。 首先来说说单向通道。我们在说“通道”的时候指的都是双向通道,即:既可以发也可以收的通道。 所谓单向通道就是,只能发不能收,或者只能收不能发的通道。一个通道是双向
2024-09-22
通道的基本操作 通道的基本操作
作为 Go 语言最有特色的数据类型,通道(channel)完全可以与 goroutine(也可称为 go 程)并驾齐驱,共同代表 Go 语言独有的并发编程模式和编程哲学。 Don’t communicate by sharing memo
2024-09-22
字典的操作和约束 字典的操作和约束
至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器。它们或用连续存储或用互存指针的方式收纳元素,每个元素都代表了一个从属于某一类型的独立值。 我们今天要讲的字典(map)却不同,它能存储的不是单一值的集合,而是键值对的集合。
2024-09-20
container包中的那些容器 container包中的那些容器
我们在上次讨论了数组和切片,当我们提到数组的时候,往往会想起链表。Go 语言的链表实现在标准库的container/list代码包中。 这个代码包中有两个公开的程序实体——List和Element,List 实现了一个双向链表(以下简称链表
2024-09-20
数组和切片 数组和切片
从本篇文章开始,我们正式进入了模块 2 的学习。在这之前,我们已经聊了很多的 Go 语言和编程方面的基础知识,相信你已经对 Go 语言的开发环境配置、常用源码文件写法,以及程序实体(尤其是变量)及其相关的各种概念和编程技巧(比如类型推断、变
2024-09-20
程序实体的那些事儿 (下) 程序实体的那些事儿 (下)
在上一篇文章,我们一直都在围绕着可重名变量进行讨论。 还记得吗?最后我强调,如果可重名变量的类型不同,那么就需要引起我们的特别关注了,它们之间可能会存在“屏蔽”的现象。 必要时,我们需要严格地检查它们的类型。但怎样检查呢?咱们现在就说。我今
2024-09-19
程序实体的那些事儿(中) 程序实体的那些事儿(中)
在前文中,我解释过代码块的含义。Go 语言的代码块是一层套一层的,就像大圆套小圆。一个代码块可以有若干个子代码块;但对于每个代码块,最多只会有一个直接包含它的代码块(后者可以简称为前者的外层代码块)。 这种代码块的划分,也间接地决定了程序实
2024-09-19
程序实体的那些事儿(上) 程序实体的那些事儿(上)
我已经为你打开了 Go 语言编程之门,并向你展示了“程序从初建到拆分,再到模块化”的基本演化路径。 一个编程老手让程序完成基本演化,可能也就需要几十分钟甚至十几分钟,因为他们一开始就会把车开到模块化编程的道路上。我相信,等你真正理解了这个过
2024-09-19
库源码文件 库源码文件
你已经使用过 Go 语言编写了小命令(或者说微型程序)吗? 当你在编写“Hello, world”的时候,一个源码文件就足够了,虽然这种小玩意儿没什么用,最多能给你一点点莫名的成就感。如果你对这一点点并不满足,别着急,跟着学,我肯定你也可以
2024-09-19
4 / 11