博客园 - lvp
uuid:6cbd1ba2-f883-4c34-aed1-30dde64a3a3e;id=718627
2024-03-08T08:30:47Z
lvp
https://www.cnblogs.com/peter-yan/
feed.cnblogs.com
https://www.cnblogs.com/peter-yan/p/15407325.html
模块三 GO语言实战与应用-程序性能分析基础(下) - lvp
在上一篇文章中,我们围绕着“怎样让程序对 CPU 概要信息进行采样”这一问题进行了探讨,今天,我们再来一起看看它的拓展问题。 知识扩展 问题 1:怎样设定内存概要信息的采样频率? 针对内存概要信息的采样会按照一定比例收集 Go 程序在运行期间的堆内存使用情况。设定内存概要信息采样频率的方法很简单,只
2021-10-14T08:41:00Z
2021-10-14T08:41:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】在上一篇文章中,我们围绕着“怎样让程序对 CPU 概要信息进行采样”这一问题进行了探讨,今天,我们再来一起看看它的拓展问题。 知识扩展 问题 1:怎样设定内存概要信息的采样频率? 针对内存概要信息的采样会按照一定比例收集 Go 程序在运行期间的堆内存使用情况。设定内存概要信息采样频率的方法很简单,只 <a href="https://www.cnblogs.com/peter-yan/p/15407325.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15407266.html
模块三 GO语言实战与应用-程序性能分析基础(上) - lvp
Go 语言为程序开发者们提供了丰富的性能分析 API,和非常好用的标准工具。这些 API 主要存在于: runtime/pprof; net/http/pprof; runtime/trace; 这三个代码包中。 另外,runtime代码包中还包含了一些更底层的 API。它们可以被用来收集或输出 G
2021-10-14T08:29:00Z
2021-10-14T08:29:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】Go 语言为程序开发者们提供了丰富的性能分析 API,和非常好用的标准工具。这些 API 主要存在于: runtime/pprof; net/http/pprof; runtime/trace; 这三个代码包中。 另外,runtime代码包中还包含了一些更底层的 API。它们可以被用来收集或输出 G <a href="https://www.cnblogs.com/peter-yan/p/15407266.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15407106.html
模块三 GO语言实战与应用-基于HTTP协议的网络服务 - lvp
我们在上一篇文章中简单地讨论了网络编程和 socket,并由此提及了 Go 语言标准库中的syscall代码包和net代码包。 我还重点讲述了net.Dial函数和syscall.Socket函数的参数含义。前者间接地调用了后者,所以正确理解后者,会对用好前者有很大裨益。 之后,我们把视线转移到了n
2021-10-14T08:01:00Z
2021-10-14T08:01:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】我们在上一篇文章中简单地讨论了网络编程和 socket,并由此提及了 Go 语言标准库中的syscall代码包和net代码包。 我还重点讲述了net.Dial函数和syscall.Socket函数的参数含义。前者间接地调用了后者,所以正确理解后者,会对用好前者有很大裨益。 之后,我们把视线转移到了n <a href="https://www.cnblogs.com/peter-yan/p/15407106.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15405974.html
模块三 GO语言实战与应用-访问网络服务 - lvp
在这之前的几十篇文章中,我向你一点一点地介绍了很多 Go 语言的核心知识,以及一些最最基础的标准库代码包。我想,你已经完全有能力独立去做一些事情了。 为了激发你更多的兴趣,我还打算用几篇文章来说说 Go 语言的网络编程。不过,关于网络编程这个事情,恐怕早已庞大到用一两本专著都无法对它进行完整论述的地
2021-10-14T03:39:00Z
2021-10-14T03:39:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】在这之前的几十篇文章中,我向你一点一点地介绍了很多 Go 语言的核心知识,以及一些最最基础的标准库代码包。我想,你已经完全有能力独立去做一些事情了。 为了激发你更多的兴趣,我还打算用几篇文章来说说 Go 语言的网络编程。不过,关于网络编程这个事情,恐怕早已庞大到用一两本专著都无法对它进行完整论述的地 <a href="https://www.cnblogs.com/peter-yan/p/15405974.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15405888.html
模块三 GO语言实战与应用-使用OS包中的API (下) - lvp
我们在上一篇文章中。从“os.File类型都实现了哪些io包中的接口”这一问题出发,介绍了一系列的相关内容。今天我们继续围绕这一知识点进行扩展。 知识扩展 问题 1:可应用于File值的操作模式都有哪些? 针对File值的操作模式主要有只读模式、只写模式和读写模式。 这些模式分别由常量os.O_RD
2021-10-14T03:25:00Z
2021-10-14T03:25:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】我们在上一篇文章中。从“os.File类型都实现了哪些io包中的接口”这一问题出发,介绍了一系列的相关内容。今天我们继续围绕这一知识点进行扩展。 知识扩展 问题 1:可应用于File值的操作模式都有哪些? 针对File值的操作模式主要有只读模式、只写模式和读写模式。 这些模式分别由常量os.O_RD <a href="https://www.cnblogs.com/peter-yan/p/15405888.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15405836.html
模块三 GO语言实战与应用-使用os包中的API (上) - lvp
今天要讲的是os代码包中的 API。这个代码包可以让我们拥有操控计算机操作系统的能力。 前导内容:os 包中的 API 这个代码包提供的都是平台不相关的 API。那么说,什么叫平台不相关的 API 呢? 它的意思是:这些 API 基于(或者说抽象自)操作系统,为我们使用操作系统的功能提供高层次的支持
2021-10-14T03:15:00Z
2021-10-14T03:15:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】今天要讲的是os代码包中的 API。这个代码包可以让我们拥有操控计算机操作系统的能力。 前导内容:os 包中的 API 这个代码包提供的都是平台不相关的 API。那么说,什么叫平台不相关的 API 呢? 它的意思是:这些 API 基于(或者说抽象自)操作系统,为我们使用操作系统的功能提供高层次的支持 <a href="https://www.cnblogs.com/peter-yan/p/15405836.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15405545.html
模块三 GO语言实战与应用-BUFIO包中的数据类型 (下) - lvp
在上一篇文章中,我提到了bufio包中的数据类型主要有Reader、Scanner、Writer和ReadWriter。并着重讲到了bufio.Reader类型与bufio.Writer类型,今天,我们继续专注bufio.Reader的内容来进行学习。 知识扩展 问题 :bufio.Reader类型
2021-10-14T02:31:00Z
2021-10-14T02:31:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】在上一篇文章中,我提到了bufio包中的数据类型主要有Reader、Scanner、Writer和ReadWriter。并着重讲到了bufio.Reader类型与bufio.Writer类型,今天,我们继续专注bufio.Reader的内容来进行学习。 知识扩展 问题 :bufio.Reader类型 <a href="https://www.cnblogs.com/peter-yan/p/15405545.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15403318.html
模块三 GO语言实战与应用-bufio包中的数据类型 (上) - lvp
bufio是“buffered I/O”的缩写。顾名思义,这个代码包中的程序实体实现的 I/O 操作都内置了缓冲区 bufio包中的数据类型主要有: Reader; Scanner; Writer和ReadWriter 与io包中的数据类型类似,这些类型的值也都需要在初始化的时候,包装一个或多个简单
2021-10-13T09:54:00Z
2021-10-13T09:54:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】bufio是“buffered I/O”的缩写。顾名思义,这个代码包中的程序实体实现的 I/O 操作都内置了缓冲区 bufio包中的数据类型主要有: Reader; Scanner; Writer和ReadWriter 与io包中的数据类型类似,这些类型的值也都需要在初始化的时候,包装一个或多个简单 <a href="https://www.cnblogs.com/peter-yan/p/15403318.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15403265.html
模块三 GO语言实战与应用-IO包中的接口和工具 (下) - lvp
上一篇文章中,我主要讲到了io.Reader的扩展接口和实现类型。当然,io代码包中的核心接口不止io.Reader一个。 我们基于它引出的一条主线,只是io包类型体系中的一部分。我们很有必要再从另一个角度去探索一下,以求对io包有更加全面的了解。 下面的一个问题就与此有关。 知识扩展 问题:io包
2021-10-13T09:42:00Z
2021-10-13T09:42:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】上一篇文章中,我主要讲到了io.Reader的扩展接口和实现类型。当然,io代码包中的核心接口不止io.Reader一个。 我们基于它引出的一条主线,只是io包类型体系中的一部分。我们很有必要再从另一个角度去探索一下,以求对io包有更加全面的了解。 下面的一个问题就与此有关。 知识扩展 问题:io包 <a href="https://www.cnblogs.com/peter-yan/p/15403265.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15403021.html
模块三 GO语言实战与应用-io包中的接口和工具 (上) - lvp
在前几篇文章中,主要讨论了strings.Builder、strings.Reader和bytes.Buffer这三个数据类型。 知识回顾 还记得吗?当时我还问过你“它们都实现了哪些接口”。在我们继续讲解io包中的接口和工具之前,我先来解答一下这个问题。 strings.Builder类型主要用于构
2021-10-13T09:07:00Z
2021-10-13T09:07:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】在前几篇文章中,主要讨论了strings.Builder、strings.Reader和bytes.Buffer这三个数据类型。 知识回顾 还记得吗?当时我还问过你“它们都实现了哪些接口”。在我们继续讲解io包中的接口和工具之前,我先来解答一下这个问题。 strings.Builder类型主要用于构 <a href="https://www.cnblogs.com/peter-yan/p/15403021.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15402753.html
模块三 GO语言实战与应用-BYTES包与字节串操作(下) - lvp
在上一篇文章中,我们分享了bytes.Buffer中已读计数的大致功用,并围绕着这个问题做了解析,下面我们来进行相关的知识扩展。 知识扩展 问题 1:bytes.Buffer的扩容策略是怎样的? Buffer值既可以被手动扩容,也可以进行自动扩容。并且,这两种扩容方式的策略是基本一致的。所以,除非我
2021-10-13T08:20:00Z
2021-10-13T08:20:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】在上一篇文章中,我们分享了bytes.Buffer中已读计数的大致功用,并围绕着这个问题做了解析,下面我们来进行相关的知识扩展。 知识扩展 问题 1:bytes.Buffer的扩容策略是怎样的? Buffer值既可以被手动扩容,也可以进行自动扩容。并且,这两种扩容方式的策略是基本一致的。所以,除非我 <a href="https://www.cnblogs.com/peter-yan/p/15402753.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15402705.html
模块三 GO语言实战与应用-bytes包与字节串操作(上) - lvp
我相信,经过上一次的学习,你已经对strings.Builder和strings.Reader这两个类型足够熟悉了。 我上次还建议你去自行查阅strings代码包中的其他程序实体。如果你认真去看了,那么肯定会对我们今天要讨论的bytes代码包,有种似曾相识的感觉。 前导内容: bytes.Buffe
2021-10-13T08:10:00Z
2021-10-13T08:10:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】我相信,经过上一次的学习,你已经对strings.Builder和strings.Reader这两个类型足够熟悉了。 我上次还建议你去自行查阅strings代码包中的其他程序实体。如果你认真去看了,那么肯定会对我们今天要讨论的bytes代码包,有种似曾相识的感觉。 前导内容: bytes.Buffe <a href="https://www.cnblogs.com/peter-yan/p/15402705.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15401454.html
模块三 GO语言实战与应用-strings包与字符串操作 - lvp
在上一篇文章中,我介绍了 Go 语言与 Unicode 编码规范、UTF-8 编码格式的渊源及运用。 Go 语言不但拥有可以独立代表 Unicode 字符的类型rune,而且还有可以对字符串值进行 Unicode 字符拆分的for语句。 除此之外,标准库中的unicode包及其子包还提供了很多的函数
2021-10-13T03:42:00Z
2021-10-13T03:42:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】在上一篇文章中,我介绍了 Go 语言与 Unicode 编码规范、UTF-8 编码格式的渊源及运用。 Go 语言不但拥有可以独立代表 Unicode 字符的类型rune,而且还有可以对字符串值进行 Unicode 字符拆分的for语句。 除此之外,标准库中的unicode包及其子包还提供了很多的函数 <a href="https://www.cnblogs.com/peter-yan/p/15401454.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15401364.html
模块三 GO语言实战与应用-unicode与字符编码 - lvp
到目前为止,我们已经一起陆陆续续地学完了 Go 语言中那些最重要也最有特色的概念、语法和编程方式。我对于它们非常喜爱,简直可以用如数家珍来形容了。 在开始今天的内容之前,我先来做一个简单的总结。 Go 语言经典知识总结 基于混合线程的并发编程模型自然不必多说。 在数据类型方面有: 基于底层数组的切片
2021-10-13T03:29:00Z
2021-10-13T03:29:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】到目前为止,我们已经一起陆陆续续地学完了 Go 语言中那些最重要也最有特色的概念、语法和编程方式。我对于它们非常喜爱,简直可以用如数家珍来形容了。 在开始今天的内容之前,我先来做一个简单的总结。 Go 语言经典知识总结 基于混合线程的并发编程模型自然不必多说。 在数据类型方面有: 基于底层数组的切片 <a href="https://www.cnblogs.com/peter-yan/p/15401364.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15401257.html
模块三 GO语言实战与应用-并发安全字典SYNC.MAP(下) - lvp
我们在上一篇文章中谈到了,由于并发安全字典提供的方法涉及的键和值的类型都是interface{},所以我们在调用这些方法的时候,往往还需要对键和值的实际类型进行检查。 这里大致有两个方案。我们上一篇文章中提到了第一种方案,在编码时就完全确定键和值的类型,然后利用 Go 语言的编译器帮我们做检查。 这
2021-10-13T03:13:00Z
2021-10-13T03:13:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】我们在上一篇文章中谈到了,由于并发安全字典提供的方法涉及的键和值的类型都是interface{},所以我们在调用这些方法的时候,往往还需要对键和值的实际类型进行检查。 这里大致有两个方案。我们上一篇文章中提到了第一种方案,在编码时就完全确定键和值的类型,然后利用 Go 语言的编译器帮我们做检查。 这 <a href="https://www.cnblogs.com/peter-yan/p/15401257.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15401177.html
模块三 GO语言实战与应用-并发安全字典sync.Map(上) - lvp
在前面,我几乎已经把 Go 语言自带的同步工具全盘托出了。你是否已经听懂了会用了呢? 无论怎样,我都希望你能够多多练习、多多使用。它们和 Go 语言独有的并发编程方式并不冲突,相反,配合起来使用,绝对能达到“一加一大于二”的效果。 当然了,至于怎样配合就是一门学问了。我在前面已经讲了不少的方法和技巧
2021-10-13T03:01:00Z
2021-10-13T03:01:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】在前面,我几乎已经把 Go 语言自带的同步工具全盘托出了。你是否已经听懂了会用了呢? 无论怎样,我都希望你能够多多练习、多多使用。它们和 Go 语言独有的并发编程方式并不冲突,相反,配合起来使用,绝对能达到“一加一大于二”的效果。 当然了,至于怎样配合就是一门学问了。我在前面已经讲了不少的方法和技巧 <a href="https://www.cnblogs.com/peter-yan/p/15401177.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15401001.html
模块三 GO语言实战与应用-临时对象池sync.Pool - lvp
到目前为止,我们已经一起学习了 Go 语言标准库中最重要的那几个同步工具,这包括非常经典的互斥锁、读写锁、条件变量和原子操作,以及 Go 语言特有的几个同步工具: sync/atomic.Value sync.Once sync.WaitGroup context.Context 今天,我们来讲 G
2021-10-13T02:35:00Z
2021-10-13T02:35:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】到目前为止,我们已经一起学习了 Go 语言标准库中最重要的那几个同步工具,这包括非常经典的互斥锁、读写锁、条件变量和原子操作,以及 Go 语言特有的几个同步工具: sync/atomic.Value sync.Once sync.WaitGroup context.Context 今天,我们来讲 G <a href="https://www.cnblogs.com/peter-yan/p/15401001.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/15400894.html
模块三 GO语言实战与应用-context.Context类型 - lvp
在使用WaitGroup值的时候,我们最好用“先统一Add,再并发Done,最后Wait”的标准模式来构建协作流程。 如果在调用该值的Wait方法的同时,为了增大其计数器的值,而并发地调用该值的Add方法,那么就很可能会引发 panic。 这就带来了一个问题,如果我们不能在一开始就确定执行子任务的
2021-10-13T02:14:00Z
2021-10-13T02:14:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】在使用WaitGroup值的时候,我们最好用“先统一Add,再并发Done,最后Wait”的标准模式来构建协作流程。 如果在调用该值的Wait方法的同时,为了增大其计数器的值,而并发地调用该值的Add方法,那么就很可能会引发 panic。 这就带来了一个问题,如果我们不能在一开始就确定执行子任务的 <a href="https://www.cnblogs.com/peter-yan/p/15400894.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/14743440.html
模块三 GO语言实战与应用-sync.WaitGroup和sync.Once - lvp
我们在前几次讲的互斥锁、条件变量和原子操作都是最基本重要的同步工具。在 Go 语言中,除了通道之外,它们也算是最为常用的并发安全工具了。 说到通道,不知道你想过没有,之前在一些场合下里,我们使用通道的方式看起来都似乎有些蹩脚。 比如:声明一个通道,使它的容量与我们手动启用的 goroutine 的数
2021-05-08T00:00:00Z
2021-05-08T00:00:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】我们在前几次讲的互斥锁、条件变量和原子操作都是最基本重要的同步工具。在 Go 语言中,除了通道之外,它们也算是最为常用的并发安全工具了。 说到通道,不知道你想过没有,之前在一些场合下里,我们使用通道的方式看起来都似乎有些蹩脚。 比如:声明一个通道,使它的容量与我们手动启用的 goroutine 的数 <a href="https://www.cnblogs.com/peter-yan/p/14743440.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/peter-yan/p/14743430.html
模块三 GO语言实战与应用-原子操作(下) - lvp
我们接着上一篇文章的内容继续聊,上一篇我们提到了,sync/atomic包中的函数可以做的原子操作有:加法(add)、比较并交换(compare and swap,简称 CAS)、加载(load)、存储(store)和交换(swap)。并且以此衍生出了两个问题。 今天我们继续来看第三个衍生问题: 比
2021-05-07T23:32:00Z
2021-05-07T23:32:00Z
lvp
https://www.cnblogs.com/peter-yan/
【摘要】我们接着上一篇文章的内容继续聊,上一篇我们提到了,sync/atomic包中的函数可以做的原子操作有:加法(add)、比较并交换(compare and swap,简称 CAS)、加载(load)、存储(store)和交换(swap)。并且以此衍生出了两个问题。 今天我们继续来看第三个衍生问题: 比 <a href="https://www.cnblogs.com/peter-yan/p/14743430.html" target="_blank">阅读全文</a>