你自己写代码经常会go run xxx.go
,但是如果一个仓库下有一个cmd
目录并且之下会有很多main
函数,那么你每次启动都会go run cmd/xxx.go xxxx
,这样做很ugly,有没有办法让启动程序更优雅美观一些呢?当然是有的,社区有很成熟的命令行库程序,例如今天我们来介绍的Cobra.
samber/lo 包提升我们代码中的迭代质量
github.com/samber/lo
是基于go1.18版本之后的Lodash的工具库,Lodash则是一个一致性、模块化、高性能的JavaScript实用工具库,用于提升开发者效率,提高原生JavaScript方法的性能,在业界赫赫有名。
lo 项目开始时作为一个有新泛型实现的实验,在某些方面可能看起来像Lodash。作者曾使用go-funk包进行编码,但go-funk使用反射(reflection),因此不是类型安全的,使用不当可能还会导致panic。
定时任务是我们经常使用到的库,Linux crontab 是用来定期执行程序的命令。
当我们写我们的后台服务时,使用限流器是非常有必要的,限流器可以帮助我们限制请求的速率,保护服务,避免服务过载等。
Golang 标准库中就自带了限流算法的实现golang.org/x/time/rate。该限流器是基于 Token Bucket(令牌桶) 实现的。
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问集合元素的方法,而不需要暴露集合的内部表示。
中介者模式是一种行为型设计模式,它定义了一个对象,用于封装一组对象之间的交互。中介者模式使得各个对象不需要显式地相互引用,从而降低了它们之间的耦合度。
命令模式(Command Pattern)是一种行为型设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
备忘录模式是一种行为型设计模式,它可以在不破坏对象的封装性的前提下,保存和恢复对象的内部状态。备忘录模式可以实现对象的撤销、回滚、恢复等功能。
状态模式是一种行为型设计模式,它允许一个对象在其内部状态改变时,改变其行为。状态模式将对象的状态和行为分离,使得对象可以在运行时切换不同的状态,从而实现不同的行为。
策略模式是一种行为型设计模式,它定义了一系列的算法,将它们封装在一个个的策略类中,并使它们可以互相替换。策略模式可以根据不同的情况,选择不同的算法来完成相同的功能。