2025-10-11
IT
00
请注意,本文编写于 67 天前,最后修改于 67 天前,其中某些信息可能已经过时。

目录

一、包命名(Package Naming)
二、命名规则(导出与非导出)
三、推荐目录结构
四、导入与引用风格
五、常见错误示例
✅ 推荐命名模式总结

一、包命名(Package Naming)

项目规范示例说明
包名全小写、简短、语义明确http, json, ossserver不要使用驼峰、大写、下划线
文件名与包功能对应,小写加下划线分隔server.go, handler_test.go文件名可带 _test.go
目录名通常与包名一致/ossserver, /internal/ossserver导入路径中使用目录名
导入名通常与包名相同import "example.com/app/ossserver"Go 工具会自动识别

💡 不要在包名中包含 go 或项目名重复的前缀(例如 ossserver/ossserver)。


二、命名规则(导出与非导出)

名称可见性示例说明
小写开头包内可见func start(), type server struct{}内部使用
大写开头可导出(包外可见)func Start(), type Server struct{}对外接口
缩写全部大写HTTPServer, ID, URL保持一致,不写成 HttpServer
常量大写或驼峰const MaxSize = 1024根据上下文确定

三、推荐目录结构

适用于中大型项目(含多个模块、组件、API):

myapp/ ├── cmd/ # 各独立可执行程序入口 │ └── myapp/ # 主程序入口(package main) │ └── main.go ├── internal/ # 私有逻辑(仅限本项目导入) │ └── ossserver/ # 内部模块 │ ├── server.go │ └── handler.go ├── pkg/ # 可复用模块(对外暴露) │ └── uploader/ │ ├── upload.go │ └── storage.go ├── api/ # 定义接口、协议、proto 等 │ └── v1/ │ └── types.go ├── configs/ # 配置文件模板 ├── scripts/ # 启动/构建脚本 ├── go.mod └── go.sum
  • internal/项目内部使用的包,外部无法导入。
  • pkg/可以被其他项目复用的包。
  • cmd/每个可执行文件一个子目录

四、导入与引用风格

go
import ( "fmt" "example.com/myapp/internal/ossserver" "example.com/myapp/pkg/uploader" )

使用:

go
func main() { srv := ossserver.NewServer() uploader.UploadFile("test.mp4") fmt.Println("server started") }

不要在导入时使用别名,除非名字冲突:

go
import ( jsoniter "github.com/json-iterator/go" // 当标准库 json 冲突时 )

五、常见错误示例

错误写法问题
package OssServer包名含大写,不符合 Go 风格
import "github.com/xxx/OSS_Server"导入路径不规范
HttpServer缩写大小写错误,推荐 HTTPServer
pkg1, pkg2包名无语义,不推荐

✅ 推荐命名模式总结

类型命名示例说明
包名ossserver全小写,简洁
结构体Server首字母大写
方法Start(), stop()控制导出性
常量DefaultPort驼峰命名
接口Reader, Writer一般以 -er 结尾
测试文件xxx_test.go包含测试函数

本文作者:zion

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!