一個 Gin 項目結構示例
0.4632019.07.18 02:21:02字數 144閱讀 6,104
├── gin
│ ├── Router
│ └── router.go
│ ├── Middlewares
│ └── corsMiddleware.go
│ ├── Controllers
│ └── testController.go
│ ├── Services
│ └── testService.go
│ ├── Models
│ └── testModel.go
│ ├── Databases
│ └── mysql.go
│ ├── Sessions
│ └── session.go
└── main.go
- 使用gorm訪問數據庫
- gin 為項目根目錄
- main.go 為入口文件
- Router 為路由目錄
- Middlewares 為中間件目錄
- Controllers 為控制器目錄(MVC)
- Services 為服務層目錄,這里把DAO邏輯也寫入其中,如果分開也可以
- Models 為模型目錄
- Databases 為數據庫初始化目錄
- Sessions 為session初始化目錄
- 文件 引用順序 大致如下:
main.go(在main中關閉數據庫) - router(Middlewares) - Controllers - Services(sessions) - Models - Databases
package Mysql import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" "fmt" ) var DB *gorm.DB func init() { var err error DB, err = gorm.Open("mysql", "wuyu:MIDSUMMERfish0@/gin?charset=utf8&parseTime=True&loc=Local") if err != nil { fmt.Printf("mysql connect error %v", err) } if DB.Error != nil { fmt.Printf("database error %v", DB.Error) } }
package Models import ( "gin/Databases" ) type Test struct { Id int Testcol string `gorm:"column:testcol"` }
- Services / testService.go
package Services import ( "gin/Models" ) type Test struct { Id int `json:"id"` Testcol string `json:"testcol"` } func (this *Test) Insert() (id int, err error) { var testModel Models.Test testModel.Id = this.Id testModel.Testcol = this.Testcol id, err = testModel.Insert() return }
- Controllers / testController.go
package Controllers import ( "github.com/gin-gonic/gin" "net/http" "strconv" "fmt" "gin/Services" ) func TestInsert(c *gin.Context) { var testService Services.Test err := c.ShouldBindJSON(&testService) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } id, err := testService.Insert() if err != nil { c.JSON(http.StatusOK, gin.H{ "code": -1, "message": "Insert() error!", }) return } c.JSON(http.StatusOK, gin.H{ "code": 1, "message": "success", "data": id, }) }
package Router import ( "github.com/gin-gonic/gin" "gin/Controllers" "gin/Middlewares" "gin/Sessions" "github.com/gin-contrib/sessions" ) func InitRouter() { router := gin.Default()
- Middlewares / corsMiddleware.go
package Middlewares import ( "github.com/gin-gonic/gin" "net/http" )
package Sessions import ( "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" "time" "strconv" ) var Store = cookie.NewStore([]byte("very-very-secret")) func SetSession(c *gin.Context, username string) string { session := sessions.Default(c) sessionId := "sessionIdxxxxxxxok" session.Set(sessionId, username) session.Save() return sessionId } func GetSession(c *gin.Context, sessionId string) (username string) { session := sessions.Default(c) result := session.Get(sessionId) username = result.(string) return }
package main import ( "gin/Router" "gin/Databases" ) func main() { defer Mysql.DB.Close() Router.InitRouter() }