GitHub 开源替代方案

当团队需要在内部网络部署一套代码托管平台,或希望对仓库、issue、CI/CD 流程拥有完整控制权时,自托管的 Git 服务就成了 GitHub 之外的常见选择。本文梳理几个主流的开源替代方案,重点介绍三个轻量级项目 Gogs、Gitea、GitBucket,并补充 GitLab CE 与 Forgejo 作为对照。

Go 语言 Web 框架:Macaron

Macaron 是一个用 Go 语言编写的高效、模块化 Web 框架,官方仓库自我定位为「a high productive and modular web framework in Go」。它与 Gin、Beego、Echo 等同属 Go 生态中较早期出现的一批 Web 框架,设计思路继承自 Martini,底层依赖 codegangsta/inject 实现依赖注入,但在路由层做了重写,显著降低了反射开销与内存占用。详细的中文文档可参考:

Go 语言实现的命令行工具

Go 语言在命令行工具领域有着大量优质项目。得益于交叉编译简单、单文件分发、启动快、并发模型轻量等特性,Go 已成为现代 CLI 工具最常用的实现语言之一。本文以 DNS 查询工具 doggo 为例,介绍这类工具的设计思路与实际用法。

Golang web框架

  • Fiber:受 Express.js 启发的 Go Web 框架,底层基于 fasthttp,主打零内存分配与高性能。

基于 Fiber 的开源项目:

  • Macaron:高生产力、模块化的 Go Web 框架。目前已进入维护模式,不再新增功能,官方推荐其后继者 Flamego
  • Beego:老牌高性能 Go Web 框架,提供 ORM、缓存、日志、配置、任务等一整套模块。注:原作者仓库 astaxie/beego 已迁移至 beego/beego 组织,请使用新地址。
  • Gin:使用最广泛的 Go Web 框架,采用 httprouter 改造的路由,性能高、API 简洁,中间件生态丰富。
  • Echo:高性能、极简的 Go Web 框架,自动 TLS、HTTP/2、可扩展中间件支持完善。
  • chi:轻量、兼容 net/http 的路由库,API 与标准库无缝衔接,适合构建可组合的 HTTP 服务。
  • gorilla/mux:强大的 HTTP 路由与请求匹配器,功能丰富。Gorilla 工具集曾在 2022 年底被归档,后由新的维护者团队接管并恢复维护。
  • gorilla/websocket:Go 社区应用最广泛的 WebSocket 库。
  • fasthttp:为极端性能优化的 HTTP 实现,吞吐量与内存占用均显著优于标准库 net/http,但 API 与 net/http 不兼容。
  • httprouter:基于 radix tree 的高性能路由,是众多 Go Web 框架(含 Gin)的底层路由原型。

Hertz(发音 [həːts],赫兹)是字节跳动开源的 Golang 微服务 HTTP 框架,由 CloudWeGo 社区维护。它最初 fork 自 fasthttp,在设计上参考了 Gin、Echo 等开源框架的优势,并结合字节跳动内部对高性能与可扩展性的诉求进行了重构与演进。其默认网络库使用 CloudWeGo 自研的 Netpoll(基于 epoll),并保留了切换至 Go 标准网络库的能力,具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已大规模使用。

Golang 常用的工具与功能库

Go 标准库覆盖面相当广,但工程实践中仍有许多「写起来啰嗦、但又避不开」的常见需求:类型之间的安全转换、切片去重、字符串处理、优雅重启、后台任务编排、网络报文解析等。本文梳理几款在 Go 项目里出现频率较高的工具与功能库,介绍其定位、核心特性和维护状态,便于选型时参考。所有库均在 GitHub 上开源,文末附官方链接。

Golang 常用日志库

日志是服务可观测性的基石。Go 生态中,日志库大致经历了「标准库 log → 第三方结构化日志库(logruszapzerolog) → 标准库 log/slog」三个阶段。本文梳理几款在工程中常见的 Go 日志库,介绍其定位、特性与基础用法,便于在实际选型时参考。