Pacman 是一个 Golang 库,它抽象了 Golang 应用程序开发中常用的库和模式。它提供了一组标准的接口和实现,可以用来快速构建 Golang 应用程序。
我们从两个方面得到灵感:
- Pacman 是 Arch Linux 的包管理器,它是一个非常流行的 Linux 发行版。 我们希望能够像 Arch Linux 中的 pacman 一样,让第三方包在 Go 项目中使用起来更加简单。
- Pacman 也是一个 1980 年代非常流行的视频游戏角色。 我们希望能够像 Pacman 吃掉迷宫中所有的点一样,让 Golang 应用的开发更加简单。
v0.0.5
基本的文档编写,以及部分代码格式的更改
v0.0.4(20220829)
- 入口文件处理,将每个模块各自进行初始化后交由 pacman.App 统一引用
v0.0.3(20220823)
- 配置文件获取使用
viper
包 ,方便后期扩展 - 更新脚手架初始化依赖使用配置文件调用方法
- 移除不必要的开发文件
Golang 在后端开发已经相对的成熟,但是在开发过程中往往会困扰我们的:
- 我们需要选择合适的类库或者解决方案,或者我们想同时尝试多种的方案,但不想过于依赖;
- 第三方依赖的升级和替换使用会非常的麻烦,而且有可能会失败(例如第三方类库不支持大版本更新等);
- 不同的微服务其实从复用角度上说有很多通用的场景,这些不必须重复去开发。
种种上述的问题,这需要我们去考虑如何引用、组织以及管理第三方的引用的依赖。其实 Java 已经提供了非常好的思路,例如 Spring Framework 中的 Bean 等等,这些都是 IoC 思想的一种实现。
我们的想法是可能不需要实现那么「笨重」或者「臃肿」,但是能够从 Golang 的角度和思维上来说解决这些问题。因此,就有了这个框架以及对应的代码组织形式。
我们的代码组织形式首先是使用 interface 约定,然后使用 contrib 去实现,从依赖的角度上来说,调用者只只需要关心 interface 的接口以及返回即可,不需要去关心如何实现。因此,可以完整的解决上面提出的两点问题。
根据设计原则,我们可以调用者角度上来使用这个框架类库,例如我们使用 Cache 组件使用的方式:
首先,我们引入 cache 的 interface,它定义了我们 Cache 接口的形式
import "github.com/segmentfault/pacman/cache/v2"
然后,我们引入 contrib 包下面的具体实现(如果有必要,您也可以使用自己的方案实现,参见下章节)
import "github.com/segmentfault/pacman/contrib/cache/v2"
然后就是具体的使用,例如我们定义了个非常简单的字符串形式的 Cache
cache := v2.NewCache[int, string]()
cache.Set(1, "hello")
got, ok := cache.Get(1)
assert.Equal(t, ok, true)
assert.Equal(t, got, "hello")
对,目前使用方面就是那么的简单!如果想查看详细的细节,可以参考各个模块的具体 README 说明。