本文档解释了标准 Go 项目布局中接口目录的用途和组织结构。接口目录是 Go 项目的组成部分,它们定义了应用程序如何与外部世界进行通信——无论是机器交互还是人工交互。
本页涵盖了 /api 和 /web 目录,它们分别是服务和 Web 应用程序的主要接口点。有关 /cmd、/internal 和 /pkg 等核心目录的信息,请参阅 核心目录结构。
接口目录包含定义和资源,这些构成了应用程序的面向外部的方面。它们在应用程序的实现(位于 /internal 和 /pkg)与外部实体如何与之交互之间建立了清晰的边界。
图示:Go 项目结构中的接口目录
/api)The /api 目录包含描述应用程序 API 接口的定义和规范。这些定义充当服务与其使用者之间的契约。
/api 目录的内容The /api 目录通常包含
图示:API 目录组件及关系
The API directory serves several important functions in a Go project
/api/v1,/api/v2)/web)The /web 目录包含与 Web 接口相关的组件,包括静态资源、模板和单页应用程序 (SPA)。此目录侧重于通过浏览器进行的与人的交互,而不是机器到机器的通信。
/web 目录的内容The /web 目录通常包含
图示:Web 目录组件及关系
The web directory serves several important functions
两个接口目录都与应用程序的核心组件密切交互。理解这些关系对于维护结构良好的 Go 项目至关重要。
图示:接口目录与核心组件的集成
API 驱动开发:
/api 中定义 API 规范/internal 中实现处理程序/pkg 中公开可重用组件/cmd 中创建应用程序入口点Web 驱动开发:
/web 中设计 Web 界面/internal 中实现处理程序/web/templates 中创建 HTML 模板/internal 中的业务逻辑组织接口目录时,请考虑
接口目录应包含版本控制策略
| 接口类型 | 版本控制方法 | 示例 |
|---|---|---|
| REST API | URL 路径组件 | /api/v1/users |
| gRPC API | 包命名 | proto 文件中的 package v1 |
| Web 组件 | 目录结构 | /web/v2/components |
| GraphQL API | Schema 版本控制 | 类型后缀或单独的 schema |
接口目录应附带全面的测试
接口目录(/api 和 /web)构成了 Go 应用程序与其外部使用者之间的边界。通过正确组织这些目录,您可以在接口定义与其实现之间建立清晰的隔离,从而实现更易于维护和理解的代码库。
在构建公开 API 或 Web 界面的 Go 应用程序时,这些目录为定义他人如何与您的应用程序交互的规范、资源和模板提供了结构化的位置。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(aa2033)