Go 每日一库之 nutsdb
简介nutsdb是一个完全由Go编写的简单、快速、可嵌入的持久化存储。nutsdb与我们之前介绍过的buntdb有些类似,但是支持List、Set、SortedSet这些数据结构。快速使用先安装:$gogetgithub.com/xujiajun/nutsdb后使用:packagemainimpor
Go 每日一库之 zerolog
简介每个编程语言都有很多日志库,因为记录日志在每个项目中都是必须的。前面我们介绍了标准日志库log、好用的logrus和上一篇文章中介绍的由uber开源的高性能日志库zap。zerolog相比zap更进了一步,它的API设计非常注重开发体验和性能。zerolog只专注于记录JSON格式的日志,号称0
Go 每日一库之 zap
简介在很早之前的文章中,我们介绍过Go标准日志库log和结构化的日志库logrus。在热点函数中记录日志对日志库的执行性能有较高的要求,不能影响正常逻辑的执行时间。uber开源的日志库zap,对性能和内存分配做了极致的优化。快速使用先安装:$gogetgo.uber.org/zap后使用:packa
Go 每日一库之 go-app
简介go-app是一个使用Go+WebAssembly技术编写渐进式Web应用的库。WebAssembly是一种可以运行在现代浏览器中的新式代码。近两年来,WebAssembly技术取得了较大的发展。我们现在已经可以使用C/C++/Rust/Go等高级语言编写WebAssembly代码。本来就来介绍
Go 每日一库之 gron
简介gron是一个比较小巧、灵活的定时任务库,可以执行定时的、周期性的任务。gron提供简洁的、并发安全的接口。我们先介绍gron库的使用,然后简单分析一下源码。快速使用先安装:$gogetgithub.com/roylee0704/gron后使用:packagemainimport("fmt""s
Go 每日一库之 plot
简介本文介绍Go语言的一个非常强大、好用的绘图库——plot。plot内置了很多常用的组件,基本满足日常需求。同时,它也提供了定制化的接口,可以实现我们的个性化需求。plot主要用于将数据可视化,便于我们观察、比较。快速使用先安装:$gogetgonum.org/v1/plot/...后使用:pac
Go 每日一库之 gentleman
简介gentleman是一个功能齐全、插件驱动的HTTP客户端。gentleman以扩展性为原则,可以基于内置的或第三方插件创建具有丰富特性的、可复用的HTTP客户端。相比标准库net/http,gentleman更灵活、易用。快速使用先安装:$gogetgopkg.in/h2non/gentlem
Go 每日一库之 gopsutil
简介gopsutil是Python工具库psutil的Golang移植版,可以帮助我们方便地获取各种系统和硬件信息。gopsutil为我们屏蔽了各个系统之间的差异,具有非常强悍的可移植性。有了gopsutil,我们不再需要针对不同的系统使用syscall调用对应的系统方法。更棒的是gopsutil的
Go 每日一库之 validator
简介今天我们来介绍一个非常实用的库——validator。validator用于对数据进行校验。在Web开发中,对用户传过来的数据我们都需要进行严格校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。快速使用先安装:$gogetgopkg.in/go-playgro
Go 每日一库之 govaluate
简介今天我们介绍一个比较好玩的库govaluate。govaluate与JavaScript中的eval功能类似,用于计算任意表达式的值。此类功能函数在JavaScript/Python等动态语言中比较常见。govaluate让Go这个编译型语言也有了这个能力!快速使用先安装:$gogetgithu
Go 每日一库之 jj
简介在前面两篇文章中,我们分别介绍了快速读取JSON值的库gjson和快速设置JSON值的库sjson。今天我们介绍它们的作者tidwall的一个基于gjson和sjson的非常实用的命令行工具jj。它是使用Go编写的快速读取和设置JSON值的命令行程序。快速使用Mac上可以直接使用brewinst
Go 每日一库之 sjson
简介在上一篇文章中我们介绍了如何使用gjson快速读取JSON串中的值。为了内容的完整性,今天我们介绍一下如何使用sjson快速设置JSON串中的值。快速使用先安装:$gogetgithub.com/tidwall/sjson后使用:packagemainimport("fmt""github.co
Go 每日一库之 gjson
简介之前我们介绍过gojsonq,可以方便地从一个JSON串中读取值。同时它也支持各种查询、汇总统计等功能。今天我们再介绍一个类似的库gjson。在上一篇文章Go每日一库之buntdb中我们介绍过JSON索引,内部实现其实就是使用gjson这个库。gjson实际上是get+json的缩写,用于读取J
Go 每日一库之 buntdb
简介buntdb是一个完全用Go语言编写的内存键值数据库。它支持ACID、并发读、自定义索引和空间信息数据。buntdb只用一个源码文件就实现了这些功能,对于想要学习数据库底层知识的童鞋更是不容错过。感谢@kiyonlin推荐!快速使用先安装:$gogetgithub.com/tidwall/bun
Go 每日一库之 go-cmp
简介我们时常有比较两个值是否相等的需求,最直接的方式就是使用==操作符,其实==的细节远比你想象的多,我在**深入理解Go之==**中有详细介绍,有兴趣去看看。但是直接用==,一个最明显的弊端就是对于指针,只有两个指针指向同一个对象时,它们才相等,不能进行递归比较。为此,reflect包提供了一个D
Go 每日一库之 jennifer
简介今天我们介绍一个Go代码生成库jennifer。jennifer支持所有的Go语法和特性,可以用它来生成任何Go语言代码。感谢@kiyonlin的推荐!快速使用先安装:$gogetgithub.com/dave/jennifer今天我们换个思路来介绍jennifer这个库。既然,它是用来生成Go
Go 每日一库之 copier
简介上一篇文章介绍了mergo库的使用,mergo是用来给结构体或map赋值的。mergo有一个明显的不足——它只能处理相同类型的结构!如果类型不同,即使字段名和类型完全相同,mergo也无能为力。今天我们要介绍的copier库就能处理不同类型之间的赋值。除此之外,copier还能:调用同名方法为字
Go 每日一库之 mergo
简介今天我们介绍一个合并结构体字段的库mergo。mergo可以在相同的结构体或map之间赋值,可以将结构体的字段赋值到map中,可以将map的值赋值给结构体的字段。感谢@thinkgos推荐。快速使用先安装:$gogetgithub.com/imdario/mergo后使用:packagemain
Go 每日一库之 wire
简介之前的一篇文章Go每日一库之dig介绍了uber开源的依赖注入框架dig。读了这篇文章后,@overtalk推荐了Google开源的wire工具。所以就有了今天这篇文章,感谢推荐👍wire是Google开源的一个依赖注入工具。它是一个代码生成器,并不是一个框架。我们只需要在一个特殊的go文件中告
Go 每日一库之 watermill
简介在上一篇文章Go每日一库之message-bus中,我们介绍了一款小巧、实现简单的异步通信库。作为学习,message-bus确实不错。但是在实际使用上,message-bus的功能就有点捉襟见肘了。例如,message-bus将消息发送到订阅者管道之后就不管了,这样如果订阅者处理压力较大,会在