Go语言的代码仓库(repository)可以有不同的组织方式,这取决于项目的大小和复杂性。以下是一些常见的Go项目布局:
基础软件包:最简单的形式,通常包含多个.go文件,它们都属于同一个包。
project-root-directory/
go.mod
modname.go
modname_test.go
auth.go
auth_test.go
hash.go
hash_test.go
每个文件都属于modname
包,模块路径应该与仓库路径一致。
基础命令:对于命令行工具,所有文件都声明为package main
。
project-root-directory/
go.mod
auth.go
auth_test.go
client.go
main.go
包含支持包的包或命令:较大的包或命令可以拆分为支持包,通常放在internal
目录下。
project-root-directory/
internal/
auth/
auth.go
auth_test.go
go.mod
modname.go
modname_test.go
多个包:一个模块可以包含多个包,每个包都有自己的目录。
project-root-directory/
go.mod
modname.go
modname_test.go
auth/
auth.go
auth_test.go
token/
token.go
token_test.go
hash/
hash.go
internal/
trace/
trace.go
多个命令:同一个仓库中可以包含多个命令,通常每个命令都有自己的目录。
project-root-directory/
go.mod
internal/
... shared internal packages
cmd/
prog1/
main.go
prog2/
main.go
服务器项目:服务器项目通常不会有需要外部引用的包,所有Go代码都应该放在internal
目录下。
project-root-directory/
go.mod
internal/
auth/
...
metrics/
...
model/
...
cmd/
api-server/
main.go
metrics-analyzer/
main.go
如果你正在使用版本控制系统,现在是初始化仓库、添加文件和提交更改的好时机。你不需要使用版本控制系统来编写Go代码,但使用它可以帮助维护代码历史和协作。
此外,Go团队提供了官方的模块布局指南,你可以在Go模块布局中找到更多信息。
如果你想要贡献代码到Go项目,你可以在Go贡献指南中找到如何发送更改的详细步骤。