Go to my github

随笔分类 -  【015】Go语言核心36讲

摘要:30 | 原子操作(下) 我们接着上一篇文章的内容继续聊,上一篇我们提到了,sync/atomic包中的函数可以做的原子操作有:加法(add)、比较并交换(compare and swap,简称 CAS)、加载(load)、存储(store)和交换(swap)。并且以此衍生出了两个问题。 今天我们继 阅读全文
posted @ 2021-11-18 22:07 郑子铭 阅读(329) 评论(0) 推荐(1)
摘要:29 | 原子操作(上) 我们在前两篇文章中讨论了互斥锁、读写锁以及基于它们的条件变量,先来总结一下。 互斥锁是一个很有用的同步工具,它可以保证每一时刻进入临界区的 goroutine 只有一个。读写锁对共享资源的写操作和读操作则区别看待,并消除了读操作之间的互斥。 条件变量主要是用于协调想要访问共 阅读全文
posted @ 2021-11-17 23:19 郑子铭 阅读(300) 评论(0) 推荐(0)
摘要:28 | 条件变量sync.Cond (下) 问题 1:条件变量的Wait方法做了什么? 在了解了条件变量的使用方式之后,你可能会有这么几个疑问。 1、为什么先要锁定条件变量基于的互斥锁,才能调用它的Wait方法? 2、为什么要用for语句来包裹调用其Wait方法的表达式,用if语句不行吗? 这些问 阅读全文
posted @ 2021-11-16 23:00 郑子铭 阅读(110) 评论(0) 推荐(0)
摘要:27 | 条件变量sync.Cond (上) 前导内容:条件变量与互斥锁 我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论。实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用。 条件变量并不是被用来保护临界区和共享资源的,它是用于协调想要访问共享资源的那些线程的。当共享资源的状态发 阅读全文
posted @ 2021-11-16 09:25 郑子铭 阅读(336) 评论(0) 推荐(0)
摘要:26 | sync.Mutex与sync.RWMutex 从本篇文章开始,我们将一起探讨 Go 语言自带标准库中一些比较核心的代码包。这会涉及这些代码包的标准用法、使用禁忌、背后原理以及周边的知识。 既然 Go 语言是以独特的并发编程模型傲视群雄的语言,那么我们就先来学习与并发编程关系最紧密的代码包 阅读全文
posted @ 2021-11-14 09:17 郑子铭 阅读(364) 评论(0) 推荐(0)
摘要:25 | 更多的测试手法 在本篇文章,我会继续为你讲解更多更高级的测试方法。这会涉及testing包中更多的 API、go test命令支持的,更多标记更加复杂的测试结果,以及测试覆盖度分析等等。 前导内容:-cpu 的功能 续接前文。我在前面提到了go test命令的标记-cpu,它是用来设置测试 阅读全文
posted @ 2021-11-12 23:15 郑子铭 阅读(198) 评论(0) 推荐(0)
摘要:24 | 测试的基本规则和流程(下) Go 语言是一门很重视程序测试的编程语言,所以在上一篇中,我与你再三强调了程序测试的重要性,同时,也介绍了关于go test命令的基本规则和主要流程的内容。今天我们继续分享测试的基本规则和流程。 知识扩展 问题 1:怎样解释功能测试的测试结果? demo53.g 阅读全文
posted @ 2021-11-11 20:26 郑子铭 阅读(290) 评论(0) 推荐(0)
摘要:23 | 测试的基本规则和流程 (上) 在接下来的日子里,我将带你去学习在 Go 语言编程进阶的道路上,必须掌握的附加知识,比如:Go 程序测试、程序监测,以及 Go 语言标准库中各种常用代码包的正确用法。 从上个世纪到今日今时,程序员们,尤其是国内的程序员们,都对编写程序乐此不疲,甚至废寝忘食(比 阅读全文
posted @ 2021-11-10 23:24 郑子铭 阅读(415) 评论(0) 推荐(1)
摘要:22 | panic函数、recover函数以及defer语句(下) 我在前一篇文章提到过这样一个说法,panic 之中可以包含一个值,用于简要解释引发此 panic 的原因。 如果一个 panic 是我们在无意间引发的,那么其中的值只能由 Go 语言运行时系统给定。但是,当我们使用panic函数有 阅读全文
posted @ 2021-11-09 23:03 郑子铭 阅读(176) 评论(0) 推荐(0)
摘要:21 | panic函数、recover函数以及defer语句 (上) 在本篇,我要给你展示 Go 语言的另外一种错误处理方式。不过,严格来说,它处理的不是错误,而是异常,并且是一种在我们意料之外的程序异常。 前导知识:运行时恐慌 panic 这种程序异常被叫做 panic,我把它翻译为运行时恐慌。 阅读全文
posted @ 2021-11-08 20:41 郑子铭 阅读(369) 评论(0) 推荐(0)
摘要:20 | 错误处理 (下) 在上一篇文章中,我们主要讨论的是从使用者的角度看“怎样处理好错误值”。那么,接下来我们需要关注的,就是站在建造者的角度,去关心“怎样才能给予使用者恰当的错误值”的问题了。 知识扩展 问题:怎样根据实际情况给予恰当的错误值? 我们已经知道,构建错误值体系的基本方式有两种,即 阅读全文
posted @ 2021-11-07 11:03 郑子铭 阅读(272) 评论(0) 推荐(0)
摘要:19 | 错误处理(上) 提到 Go 语言中的错误处理,我们其实已经在前面接触过几次了。 比如,我们声明过error类型的变量err,也调用过errors包中的New函数。 我们说过error类型其实是一个接口类型,也是一个 Go 语言的内建类型。在这个接口类型的声明中只包含了一个方法Error。E 阅读全文
posted @ 2021-11-03 22:37 郑子铭 阅读(373) 评论(0) 推荐(0)
摘要:18 | if语句、for语句和switch语句 现在,让我们暂时走下神坛,回归民间。我今天要讲的if语句、for语句和switch语句都属于 Go 语言的基本流程控制语句。它们的语法看起来很朴素,但实际上也会有一些使用技巧和注意事项。我在本篇文章中会以一系列面试题为线索,为你讲述它们的用法。 那么 阅读全文
posted @ 2021-11-02 22:17 郑子铭 阅读(309) 评论(0) 推荐(0)
摘要:17 | go语句及其执行规则(下) 知识扩展 问题 1:怎样才能让主 goroutine 等待其他 goroutine? 我刚才说过,一旦主 goroutine 中的代码执行完毕,当前的 Go 程序就会结束运行,无论其他的 goroutine 是否已经在运行了。那么,怎样才能做到等其他的 goro 阅读全文
posted @ 2021-10-31 23:28 郑子铭 阅读(354) 评论(0) 推荐(0)
摘要:16 | go语句及其执行规则(上) 我们已经知道,通道(也就是 channel)类型的值,可以被用来以通讯的方式共享数据。更具体地说,它一般被用来在不同的 goroutine 之间传递数据。那么 goroutine 到底代表着什么呢? 简单来说,goroutine 代表着并发编程模型中的用户级线程 阅读全文
posted @ 2021-10-30 12:22 郑子铭 阅读(209) 评论(0) 推荐(1)
摘要:15 | 关于指针的有限操作 在前面的文章中,我们已经提到过很多次“指针”了,你应该已经比较熟悉了。不过,我们那时大多指的是指针类型及其对应的指针值,今天我们讲的则是更为深入的内容。 让我们先来复习一下。 type Dog struct { name string } func (dog *Dog) 阅读全文
posted @ 2021-10-28 22:34 郑子铭 阅读(492) 评论(0) 推荐(2)
摘要:14 | 接口类型的合理运用 前导内容:正确使用接口的基础知识 在 Go 语言的语境中,当我们在谈论“接口”的时候,一定指的是接口类型。因为接口类型与其他数据类型不同,它是没法被实例化的。 更具体地说,我们既不能通过调用new函数或make函数创建出一个接口类型的值,也无法用字面量来表示一个接口类型 阅读全文
posted @ 2021-10-27 23:24 郑子铭 阅读(534) 评论(0) 推荐(2)
摘要:13 | 结构体及其方法的使用法门 我们都知道,结构体类型表示的是实实在在的数据结构。一个结构体类型可以包含若干个字段,每个字段通常都需要有确切的名字和类型。 前导内容:结构体类型基础知识 当然了,结构体类型也可以不包含任何字段,这样并不是没有意义的,因为我们还可以为类型关联上一些方法,这里你可以把 阅读全文
posted @ 2021-10-25 23:18 郑子铭 阅读(260) 评论(2) 推荐(0)
摘要:12 | 使用函数的正确姿势 在前几期文章中,我们分了几次,把 Go 语言自身提供的,所有集合类的数据类型都讲了一遍,额外还讲了标准库的container包中的几个类型。 在几乎所有主流的编程语言中,集合类的数据类型都是最常用和最重要的。我希望通过这几次的讨论,能让你对它们的运用更上一层楼。 从今天 阅读全文
posted @ 2021-10-24 21:35 郑子铭 阅读(388) 评论(0) 推荐(1)
摘要:11 | 通道的高级玩法 我们已经讨论过了通道的基本操作以及背后的规则。今天,我再来讲讲通道的高级玩法。 首先来说说单向通道。我们在说“通道”的时候指的都是双向通道,即:既可以发也可以收的通道。 所谓单向通道就是,只能发不能收,或者只能收不能发的通道。一个通道是双向的,还是单向的是由它的类型字面量体 阅读全文
posted @ 2021-10-22 22:49 郑子铭 阅读(360) 评论(0) 推荐(0)