GO语言学习
文章平均质量分 71
细数时光
日常水文,偶然硬核
展开
-
源码阅读 Go net包 待续
源码阅读原创 2022-09-16 17:11:28 · 691 阅读 · 0 评论 -
使用opentelemetry-go操作Jaeger
分布式链路追踪原创 2022-06-15 16:11:07 · 2993 阅读 · 0 评论 -
Go 编程模式-发布订阅
发布订阅发布订阅(publish-and-subscribe)模型通常被简写为pub/sub模型。在这个模型中,消息生产者成为发布者(publisher),而消息消费者则成为订阅者(subscriber),生产者和消费者是M:N的关系。在传统生产者和消费者模型中,是将消息发送到一个队列中,而发布订阅模型则是将消息发布给一个主题。为此,我们构建了一个名为pubsub的发布订阅模型支持包:package pubsubimport ( "sync" "time")type (原创 2022-02-19 19:49:45 · 864 阅读 · 0 评论 -
Go 编程模式- Micro-Kernel
Micro-Kernel微内核架构有时也被成为插件架构模式(plug-in architecture pattern),通常用于实现基于产品的应用,如Eclipse和Firefox。然而许多公司也将内部的业务软件做成软件产品,提供版本、发版说明和插件特性。微内核架构模式通过插件向核心应用添加额外的功能,提供了可扩展性和功能的独立和分离。微内核架构包含两部分组件:核心系统(core system)和插件模块(plug-in modules)。应用逻辑被分割为独立的插件模块和核心系统,提供了可扩展性、灵活性原创 2022-02-19 19:57:13 · 539 阅读 · 0 评论 -
Go 编程模式- Pipe-Filter
和Java里面推崇的设计模式类似,Go语言也存在许多编程模式,学习这些编程模式,不仅可以让我们能了解优秀的设计思想,而且也能帮助Go程序员在工作中在写出简洁、优雅的代码实现。Pipe-Filter非常适合与数据处理及数据分析系统 (比如审批流,订单流等)Filter 封装数据处理的功能松耦合: Filter只跟数据(格式) 耦合Pipe用于连接 Filter 传递数据或者在异步处理过程中缓冲数据流进程内同步调用时,pipe 演变为数据在方法调用间传递例子:题目:将一个包含多个数字的字原创 2022-02-19 19:46:23 · 523 阅读 · 0 评论 -
LRU缓存机制扩展
LRU缓存机制扩展上一篇文章已经给出了Lru缓存机制的编码实现,现在将对LRU进行扩展key和value支持任意类型支持超时时间保证线程安全package lruimport ( "sync" "time")// cache接口type Cache interface { Put(key, value interface{}) PutWithTTL(key, value interface{}, expires time.Duration) Get(key interfa原创 2021-10-23 22:15:32 · 117 阅读 · 0 评论 -
Go语言常用性能分析入门
Go语言常用性能分析入门pprof包来做代码的性能监控,pprof 是一种用于分析数据可视化和分析的工具。Package pprof writes runtime profiling data in the format expected by the pprof visualization tool.主要有2个packagenet/http/pprof采集工具型应用运行数据进行分析runtime/pprof 采集服务型应用运行时数据进行分析在使用pprof之前先安装一些工具Graphvi原创 2021-10-14 17:12:39 · 515 阅读 · 0 评论 -
Go语言高级编程读书笔记-发布订阅模型
Go语言高级编程读书笔记-发布订阅模型发布订阅(publish-and-subscribe)模型通常被简写为pub/sub模型。在这个模型 中,消息生产者成为发布者(publisher),而消息消费者则成为订阅者 (subscriber),生产者和消费者是M:N的关系。在传统生产者和消费者模型中, 是将消息发送到一个队列中,而发布订阅模型则是将消息发布给一个主题。为此,我们构建了一个名为 pubsub 的发布订阅模型支持包:// Package pubsub implements a simple m原创 2021-09-14 19:45:20 · 212 阅读 · 0 评论 -
Go语言学习笔记之 单元测试
Go语言学习笔记之 单元测试作为一名合格的开发者,不应该在程序开发完之后才开始写测试代码。使用 Go 语言的测试框架,可以在开发的过程中就进行单元测试和基准测试。和 go build 命令类似,go test 命 令可以用来执行写好的测试代码,需要做的就是遵守一些规则来写测试。而且,可以将测试无缝 地集成到代码工程和持续集成系统里。1.单元测试单元测试是用来测试包或者程序的一部分代码或者一组代码的函数。测试的目的是确认目标 代码在给定的场景下,有没有按照期望工作。一个场景是正向路经测试,就是在正常执原创 2021-09-02 15:57:52 · 351 阅读 · 0 评论 -
GO 实战读书笔记 第7章 并发模式之 runner
GO 实战读书笔记 第7章 并发模式之 runner7.1 runnerrunner 包用于展示如何使用通道来监视程序的执行时间,如果程序运行时间太长,也可以用 runner 包来终止程序。当开发需要调度后台处理任务的程序的时候,这种模式会很有用。这个程序可能会作为 cron 作业执行,或者在基于定时任务的云环境(如 iron.io)里执行。让我们来看一下 runner 包里的 runner.go 代码文件,如代码清单 7-1 所示。代码清单 7-1 runner/runner.go// Gab原创 2021-08-29 16:18:24 · 324 阅读 · 0 评论 -
go学习笔记-sync/atomic
go学习笔记-sync/atomicatomic包提供了底层的原子级内存操作,对于同步算法的实现很有用。这些函数必须谨慎地保证正确使用。除了某些特殊的底层应用,使用通道或者sync包的函数/类型实现同步更好。应通过通信来共享内存,而不通过共享内存实现通信。(官方原话:Share memory by communicating; don’t communicate by sharing memory. 这句话是go语言多线程编程的设计哲学!)SwapT系列函数被SwapT系列函数实现的交换操作,在原原创 2021-08-24 10:37:15 · 248 阅读 · 0 评论 -
go 学习笔记之http请求
go 学习笔记之http请求今天学习一下,如何用原生的http包优雅的发起http请求。先准备服务端接口,这里使用的是gin框架package mainimport ( "github.com/gin-gonic/gin" "io/ioutil" "log" "net/http")var logger = log.Default()func main() { engine := gin.Default() engine.GET("/get", func(context *gi原创 2021-08-22 18:09:11 · 5771 阅读 · 0 评论 -
go学习笔记-sync包
go学习笔记-sync包sync包提供了基本的同步基元,如互斥锁。除了Once和WaitGroup类型,大部分都是适用于低水平程序线程,高水平的同步使用channel通信更好一些。本包的类型的值不应被拷贝。1. Locker接口type Lockertype Locker interface { Lock() Unlock()}Locker接口代表一个可以加锁和解锁的对象。1.1 Mutextype Mutextype Mutex struct { state i原创 2021-08-21 22:52:34 · 316 阅读 · 0 评论 -
GO 实战读书笔记 第1 章 关于 Go 语言的介绍
第1 章 关于 Go 语言的介绍计算机一直在演化,但是编程语言并没有以同样的速度演化。现在的手机,内置的 CPU 核数可能都多于我们使用的第一台电脑。高性能服务器拥有 64 核、128 核,甚至更多核。但是我们依旧在使用为单核设计的技术在编程(疯狂暗示)。编程的技术同样在演化。大部分程序不再由单个开发者来完成,而是由处于不同时区、不同时间段工作的一组人来完成。大项目被分解为小项目,指派给不同的程序员,程序员开发完成后,再以可以在各个应用程序中交叉使用的库或者包的形式,提交给整个团队。如今的程序员和公司原创 2021-08-12 16:02:47 · 198 阅读 · 0 评论 -
Goroutine协程调度
笔者之前是做Java开发的,在Java中如果要进行并发编程通常需要维护一个线程池。线程池的目的是减少频繁创建线程造成的不必要的开销。线程池中预先保存一定数量的线程,而新任务将不再以创建线程的方式去执行,而是将任务发布到任务队列,线程池中的线程不断地从任务队列中取出任务并执行,可以有效的减少线程创建和销毁所带来的开销。G代表任务,往往代表一个函数。线程池中的worker线程不断地从任务队列中取出任务并执行。而worker线程的调度则交给操作系统进行调度。让我思考以下2个问题如果worker线程执行原创 2021-06-12 11:10:13 · 386 阅读 · 1 评论