包含内容
Go 是正确工具之处
Go 为后端服务而生:它编译为单个静态二进制文件、不费周章便能处理数千个并发连接,并在团队成长过程中保持可读。我们在吞吐、简洁与快速迭代三者皆要紧之处选用它。
服务范围
- REST 与 gRPC API
- 微服务与服务网格
- 控制平面与编排服务
- 高并发的网络服务与工作进程
- 以单个二进制文件发布的 CLI 与内部工具
- 集成与数据流水线
我们的工作方式
我们如何用 Go 构建
整洁的分层架构,显式处理错误,并审慎运用并发。地道的 Go,让下一位工程师读得懂。
- 1
设计
我们对领域与服务边界进行建模,并在构建前就 API 契约达成一致。
- 2
地道构建
边界清晰的分层架构、显式的错误处理,以及结构化日志。
- 3
在要紧处使用并发
审慎使用 goroutine 与 channel,开启竞态检测器,对资源争用进行实测,而不是凭假设。
- 4
测试与基准
表驱动测试、针对真实数据库的集成覆盖,以及面向热点路径的基准测试。
- 5
交付与运营
一个容器化的单一静态二进制文件,配以健康检查与指标,让它易于运行。
技术栈与方法
Go 工具链
GoHTTP 路由、中间件关系型数据库结构化日志gRPC、RESTDocker、Kubernetes
优先使用标准库,只引入少量维护良好的依赖,交接之后您的团队可以自行维护。
常见问题
Go 开发常见问题
我何时该选 Go,而非 Node.js 或 Python?
对于需要处理大量并发工作、编译为单个可部署二进制文件、并在团队成长过程中保持快速与简洁的后端服务,Go 是一个有力之选。当您想前后端共用一门语言时,Node.js 胜出;做数据与 ML 工作时,Python 胜出。我们会推荐契合您团队与工作负载的那一个,而不只是我们偏爱的那个。
Go 适合做微服务吗?
非常适合。小巧的静态二进制文件、快速启动、一流的并发支持,以及扎实的 gRPC 与 HTTP 支持,让 Go 成为微服务的自然之选。不过,微服务会增加运维复杂度,我们会帮您判断是否真的需要它们,还是一个结构良好的单体服务更简单。
你们能在我们现有的 Go 代码库里工作吗?
可以。我们评审当前的结构、测试与问题所在,然后地道地加以扩展或重构。我们遵循您团队已经在用的约定,而非强加我们自己的。
你们如何安全地处理并发?
审慎行事。我们在 goroutine 与 channel 有帮助的地方才使用它们,在 CI 中运行竞态检测器,并对争用加以度量而非臆测。并发 bug 出了名地隐微,所以我们依靠工具与评审把它们挡在门外。