我的 Go 工具包用于构建无框架应用程序 Gin Web 框架 ⚡ zap UUID 此存储库不再维护 jwt-go Testify - 你必须编写测试 YAML 支持 Go 语言 gomock 安装

2025-06-08

我的 Go 工具包用于构建无框架应用程序

Gin Web框架

⚡ zap

唯一标识符

此存储库不再维护

jwt-go

作证——你必须写测试

YAML 对 Go 语言的支持

戈莫克

安装

几个月前,我开始从 PHP 转向 Go来开发公司的一个新应用程序。

大约三个月后,我在 DEV 上发表了另一篇文章,谈论我对该语言的反馈

现在是时候分享一下我目前为止用过的库和工具了。注意,我没有使用任何框架或 ORM,只是用了一些合适的库来完成工作。


图书馆

1. 毒蛇

🌠 7,353

GitHub 徽标 spf13 /毒蛇

使用 Fangs 进行 Go 配置

Viper v2 反馈

Viper 即将推出 v2 版本,我们期待听到对其中内容的期待。欢迎在此分享您的想法:https://forms.gle/R6faU74qPRPAzchZ9

谢谢你!

毒蛇

在 Awesome Go 中提及 在 repl.it 上运行

GitHub 工作流程状态 加入聊天 https://gitter.im/spf13/viper 围棋成绩单 Go 版本 PkgGoDev

用尖牙进行 Go 配置!

许多 Go 项目都是使用 Viper 构建的,包括:

安装

go get github.com/spf13/viper
Enter fullscreen mode Exit fullscreen mode

注意: Viper 使用Go Modules来管理依赖项。

Viper 是什么?

Viper 是一套完整的 Go 应用程序配置解决方案,包括12-Factor 应用程序。它专为在应用程序中运行而设计,能够处理各种类型的配置需求和格式。它支持:

  • 设置默认值
  • 从 JSON、TOML、YAML、HCL、envfile 和 Java 属性配置文件中读取
  • 实时观看并重新读取配置文件(可选)
  • 从环境变量读取
  • 从远程配置系统(etcd 或 Consul)读取数据并观察变化
  • 从命令行标志读取
  • 阅读…

2. 金戈尼克

🌠 23,913

GitHub 徽标 杜松子酒

Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。它拥有类似 Martini 的 API,性能更佳——速度最高可达 40 倍。如果您追求极致性能,Gin 是您的理想之选。

Gin Web框架

构建状态 代码验证 围棋成绩单 Go 参考 源图 开源助手 发布 待办事项

Gin 是一个用Go编写的 Web 框架。它具有类似 Martini 的 API,并且由于httprouter的存在,其性能提高了 40 倍。如果您需要性能和良好的生产力,那么您一定会喜欢 Gin。

Gin 的主要特点是:

  • 零分配路由器
  • 速度
  • 中间件支持
  • 无碰撞
  • JSON 验证
  • 路线分组
  • 错误管理
  • 内置渲染
  • 可扩展

入门

先决条件

Gin 需要Go版本1.21或更高版本。

获取杜松子酒

借助Go 的模块支持go [build|run|test]当您在代码中添加导入时,会自动获取必要的依赖项:

import "github.com/gin-gonic/gin"
Enter fullscreen mode Exit fullscreen mode

或者,使用go get

go get -u github.com/gin-gonic/gin
Enter fullscreen mode Exit fullscreen mode

奔跑的杜松子酒

一个基本的例子:

package main
import (
  "net/http"

  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  r.GET("/ping", func(c *gin.Context) {
    c.JSON(http.StatusOK,
Enter fullscreen mode Exit fullscreen mode

3. 镁

🌠 1,385

GitHub 徽标 全球标志/ mgo

Go 的 MongoDB 驱动程序

构建状态 GoDoc

Go 的 MongoDB 驱动程序

我们自己对这个分支进行了一些改进,并从原始 mgo repo 合并了几个 PR,目前正在等待审核。更改主要针对性能改进和错误修复,但也添加了一些新功能。

欢迎进一步的 PR(带有测试),但请保持向后兼容性。

API 的详细文档可在GoDoc上找到。

还包括一个实现BSON规范的子包,可以独立于驱动程序使用。

支持的版本

mgo据称在 MongoDB v3.0、3.2、3.4 和 3.6 上运行良好(并针对其进行了集成测试)。

MongoDB 4.0 目前处于实验阶段 - 我们很乐意接受 PR 以帮助改善支持!

变化

  • 修复每次查询前尝试进行身份验证的问题(详细信息
  • 消除批量更新/删除批量大小限制(详情
  • 添加对编组的本机支持time.Duration……

4. Zap

🌠 5,901

GitHub 徽标 uber-go / zap

使用 Go 进行速度极快、结构化、分级的日志记录。

⚡ zap

使用 Go 进行速度极快、结构化、分级的日志记录。

Zap 徽标

GoDoc 构建状态 覆盖状态

安装

go get -u go.uber.org/zap

请注意,zap 仅支持 Go 的两个最新小版本。

快速入门

在性能要求较高但并非关键的情况下,请使用SugaredLogger。它比其他结构化日志包快 4-10 倍,并且同时包含结构化和printf-style API。

logger, _ := zap.NewProduction()
defer logger.Sync() // flushes buffer, if any
sugar := logger.Sugar()
sugar.Infow("failed to fetch URL",
  // Structured context as loosely typed key-value pairs.
  "url", url,
  "attempt", 3,
  "backoff", time.Second,
)
sugar.Infof("Failed to fetch URL: %s", url)
Enter fullscreen mode Exit fullscreen mode

当性能和类型安全至关重要时,请使用Logger。它甚至比 更快,SugaredLogger并且分配的内存也少得多,但它仅……

5. Go.uuidgofrs/uuid

🌠 394

GitHub 徽标 gofrs / uuid

Go 的 UUID 包

唯一标识符

执照 构建状态 Go 参考 覆盖状态 围棋成绩单 CodeQL OpenSSF 最佳实践 OpenSSF 记分卡

uuid 包提供了 RFC-9562 中定义的通用唯一标识符 (UUID) 变体的纯 Go 实现。此包支持创建和解析不同格式的 UUID。

此软件包支持以下 UUID 版本:

  • 版本 1,基于时间戳和 MAC 地址
  • 版本 3,基于命名值的 MD5 哈希
  • 版本 4,基于随机数
  • 版本 5,基于命名值的 SHA-1 哈希
  • 版本 6,基于时间戳的 k 排序 id,与 v1 字段兼容
  • 版本 7,基于时间戳的 k 排序 ID

项目历史

该项目最初是从github.com/satori/go.uuid仓库 fork 而来,原因是该项目似乎已不再维护,且存在严重缺陷。我们决定接管该项目,以确保其能够得到定期维护,造福更广泛的 Go 社区。

我们要感谢 Maxim Bublis 为……所做的辛勤工作。

6. JWT-Go

🌠 4,849

GitHub 徽标 dgrijalva / jwt-go

ARCHIVE - JSON Web Tokens(JWT)的 Golang 实现。该项目目前维护在:

此存储库不再维护

新的存储库位于:https://github.com/golang-jwt/jwt

有关更多信息,请参阅问题#462

jwt-go

构建状态 GoDoc

JSON Web Tokens的go (或“golang” 以方便搜索引擎)实现

新版本即将发布:自 2016 年发布 3.0.0 版本以来,已经收到大量改进建议。我目前正在着手准备两个不同的版本:3.2.0 将包含所有非重大变更或增强功能。4.0.0 版本即将发布,其中包含重大变更。请参阅 4.0.0 里程碑,了解即将推出的功能。如果您有其他想法,或者希望参与 4.0.0 的开发,现在正是时候。如果您依赖这个库并且不想被打扰,我建议您使用依赖管理工具将其固定到版本 3。

安全通知:部分旧版 Go 语言在 cryotp/elliptic 中存在安全问题。建议至少升级到……

7. 作证

🌠 6,634

GitHub 徽标 担架/作证

具有常见断言和模拟的工具包,可与标准库很好地配合使用

作证——你必须写测试

ℹ️ 我们正在开发 testify v2,很想听听你对它的期望,请在这里发表你的看法:https://cutt.ly/testify

构建状态 围棋成绩单 PkgGoDev

Go 代码(golang)软件包集提供了许多工具来证明您的代码将按照您的预期运行。

功能包括:

开始:

assert包裹

assert包提供了一些有用的方法,允许您用 Go 编写更好的测试代码。

  • 打印友好且易于阅读的故障描述
  • 允许非常易读的代码
  • 可选地用一条消息注释每个断言

观看实际操作:

package
Enter fullscreen mode Exit fullscreen mode

8. Go-yaml

🌠 2,692

GitHub 徽标 go-yaml / yaml

YAML 对 Go 语言的支持。

YAML 对 Go 语言的支持

介绍

yaml 包使 Go 程序能够轻松地对 YAML 值进行编码和解码。它是在Canonical内部作为juju项目的一部分开发的,基于著名的libyaml C 库的纯 Go 移植,可以快速可靠地解析和生成 YAML 数据。

兼容性

yaml 包支持 YAML 1.2 的大部分内容,但保留了 1.1 中的一些行为以实现向后兼容。

具体来说,从 yaml 包 v3 开始:

  • YAML 1.1 布尔值(yes/no、on/off)只要被解码为类型化的布尔值即可支持。否则,它们将表现为字符串。YAML 1.2 中的布尔值仅为true/false
  • 根据 YAML 1.1,八进制数编码和解码为0777,而不是YAML 1.2 中指定的0o777,因为大多数解析器仍然使用旧格式,但0o777格式的八进制数受支持,因此新文件……

工具

1. Gomock + mockgen

🌠 2,023

Gomock 是一个测试库,允许你模拟依赖项并对其进行断言。Mockgen 是一个与 gomock 打包在一起的 CLI 工具,用于创建模拟。

GitHub 徽标 golang /模拟

GoMock 是 Go 编程语言的模拟框架。

戈莫克

更新,2023 年 6 月此 repo 和工具不再维护,请参阅go.uber.org/mock以获取维护的 fork。

构建状态 Go 参考

gomock 是Go 编程语言的模拟框架。它与 Go 的内置testing包集成良好,但也可以在其他环境中使用。

安装

安装 Go,安装该mockgen工具。

注意:如果尚未这样做,请务必将其添加$GOPATH/bin到您的PATH

要获取最新发布的版本,请使用:

Go 版本 < 1.16

GO111MODULE=on go get github.com/golang/mock/mockgen@v1.6.0
Enter fullscreen mode Exit fullscreen mode

Go 1.16+

go install github.com/golang/mock/mockgen@v1.6.0
Enter fullscreen mode Exit fullscreen mode

如果您在 CI 管道中使用mockgen,则可能更适合使用特定的 mockgen 版本。您应该尝试使该库与用于生成模拟的 mockgen 版本保持同步。

运行 mockgen

mockgen有两种操作模式:源和反射。

源模式

来源…

2. 莫德

🌠 977

文件观察器允许您重新启动应用程序、运行单元测试等等

GitHub 徽标 科尔特西/莫德

一个灵活的开发工具,可以运行进程并响应文件系统的变化

Travis 构建状态

Modd 是一个开发工具,它可以触发命令并管理守护进程以响应文件系统的变化。

如果您使用 modd,您还应该看看devd,一个为开发人员提供的紧凑型 HTTP 守护进程。Devd 与 modd 集成,允许您使用 modd 触发浏览器内实时重新加载。

该 repo 包含一组示例modd.conf文件,您可以查看这些文件以快速了解 modd 的功能:

例子 描述
前端配置文件 一个使用 React + Browserify + Babel 的前端项目。Modd 和 devd 取代了 Gulp/Grunt 的很多功能。
go.conf Go 的实时单元测试。
python.conf Python + Redis,使用 devd 管理 livereload。

安装

Modd 是一个独立的二进制文件,没有任何外部依赖,已发布到 OSX、Windows、Linux、FreeBSD、NetBSD 和 OpenBSD 平台。请前往发布页面,下载适用于您操作系统的软件包,然后将该二进制文件复制到您的 PATH 上的某个位置。

或者,安装 Go 1.17+ 后,您可以安装...


我希望您会发现其中一些库/工具能够满足您的需求。

不要犹豫,提出你认为很棒的建议。

感谢您的阅读!

鏂囩珷鏉ユ簮锛�https://dev.to/biros/my-go-toolkit-to-build-a-frameworkless-app-5777
PREV
Monorepo 与 Polyrepo
NEXT
Web性能优化-II