go项目开的代码规范总结

  1. 项目目录结构
    简介: 在根目录下有一个项目目录文件记录项目目录结构,能清晰的记录项目整体架构

AudioMarkGo/
├── AudioMarkGo 编译后文件
├── conf 配置文件目录
│ ├── app.conf 主配置文件,开发环境以及测试环境引入dev;生产环境则开启prod。
│ ├── dev.conf
│ └── prod.conf
├── controller 项目代码,项目主题逻辑请按照规范命名。
│ └── userCenter
│ ├── resume.go
│ └── taskList.go
├── fun 项目中需要的共用方法
│ ├── audioMarkGo.go 项目中共用方法
│ ├──userCenter.go 项目中用中心共用方法
│ ├── common.go 整个项目的共用方法
├── lang 平台语言切换配置
│ └── zh.ini
├── main.go 项目主函数
├── models 项目的数据库操作
│ ├── amProjectMember.go 数据库映射表
│ ├── mongodb.go mongoDB 数据库连接操作
│ ├── mysql.go mysql数据库连接操作
│ ├── redis.go redis 数据库连接操作
├── routers 项目路由
│ └── router.go 项目路由信息
├── swagger 自动化Api文档
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── index.html
│ ├── oauth2-redirect.html
│ ├── swagger-ui-bundle.js
│ ├── swagger-ui-bundle.js.map
│ ├── swagger-ui-standalone-preset.js
│ ├── swagger-ui-standalone-preset.js.map
│ ├── swagger-ui.css
│ ├── swagger-ui.css.map
│ ├── swagger-ui.js
│ ├── swagger-ui.js.map
│ ├── swagger.json
│ └── swagger.yml
└── tests 项目测试文件

2 引入包规范
每个包都应该有一个包注释,一个位于package 子句之前的块注释或者行注释,如果一个包内有多个go文件,可以在与包名同名的文件里写,基础格式如下:
// @Title 包名
// @Description 包功能描述
// @Author 创建人 创建时间
// @Update 创建人 修改时间

同时在引入外部包的时候,按照标准快包,程序内部包,第三方包分组引入,示例如下:
import (
"encoding/json"
"strings"

"myproject/models"
"myproject/controller"

"git.obc.im/dep/beego"h
"git.obc.im/dep/mysql"

)

3 结构体规范
结构体或者接口(接口名注意用er结尾),放在结构体前一行,格式为: 结构体名、结构体说明,同时对结构体成员进行说明(注意代码的整洁),示例如下:
// User , 用户对象,定义了用户的基础信息
type User struct{
UserName string description:"用户名称"
Email string description:"邮箱"
}

函数注释规范
// @Title 标题
// @Description 详细信息
// @Auth 创建时间 创建人
// @Param 参数类型 参数介绍
// @Return 返回类型 "错误信息"

方法注释规范
@Title
这个 API 所表达的含义,是一个文本,空格之后的内容全部解析为 title
@Description
这个 API 详细的描述,是一个文本,空格之后的内容全部解析为 Description
@Param
参数,表示需要传递到服务器端的参数,有五列参数,使用空格或者 tab 分割,五个分别表示的含义如下
参数名
参数类型,可以有的值是 formData、query、path、body、header,formData 表示是 post 请求的数据,query 表示带在 url 之后的参数,path 表示请求路径上得参数,例如上面例子里面的 key,body 表示是一个 raw 数据请求,header 表示带在 header 信息中得参数。
参数类型
是否必须
注释
@Success
成功返回给客户端的信息,三个参数,第一个是 status code。第二个参数是返回的类型,必须使用 {} 包含,第三个是返回的对象或者字符串信息,如果是 {object} 类型,那么 bee 工具在生成 docs 的时候会扫描对应的对象,这里填写的是想对你项目的目录名和对象,例如 models.ZDTProduct.ProductList 就表示 /models/ZDTProduct 目录下的 ProductList 对象。
三个参数必须通过空格分隔
@Failure
失败返回的信息,包含两个参数,使用空格分隔,第一个表示 status code,第二个表示错误信息
@router
路由信息,包含两个参数,使用空格分隔,第一个是请求的路由地址,支持正则和自定义路由,和之前的路由规则一样,第二个参数是支持的请求方法,放在 [] 之中,如果有多个方法,那么使用 , 分隔。

示例如下

// @Title Get Product list
// @Description 开发时间 编写人 Get Product list by some info
// @Success 200 {object} models.ZDTProduct.ProductList
// @Param category_id query int false "category id"
// @Param brand_id query int false "brand id"
// @Param query query string false "query of search"
// @Param segment query string false "segment"
// @Param sort query string false "sort option"
// @Param dir query string false "direction asc or desc"
// @Param offset query int false "offset"
// @Param limit query int false "count limit"
// @Param price query float false "price"
// @Param special_price query bool false "whether this is special price"
// @Param size query string false "size filter"
// @Param color query string false "color filter"
// @Param format query bool false "choose return format"
// @Failure 400 no enough input
// @Failure 500 get products common error
// @router /products [get]

posted @ 2020-07-22 16:08  尼古拉斯胖狗  阅读(428)  评论(0编辑  收藏  举报