1. 程式人生 > 實用技巧 >go專案開的程式碼規範總結

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]