gin项目构建路由篇
构建目录:

itil是app目录
db是链接数据库的连接方法库
routers目录是路由入口
routers/routers.go
package routers
import (
"github.com/gin-gonic/gin"
)
type Option func(*gin.Engine)
var options = []Option{}
// 注册app的路由配置
func Include(opts ...Option) {
options = append(options, opts...)
}
// 初始化
func Init() *gin.Engine {
r := gin.New()
for _, opt := range options {
opt(r)
}
r.Run(":31516")
return r
}
app(itil)路由
itil/routers.go
package itil
import (
"github.com/gin-gonic/gin"
)
func Routers(e *gin.Engine) {
e.GET("/api/getHr", getHrData)
e.GET("/api/getHrDetail", getHrDetail)
e.POST("/api/editHr", EditHr)
e.POST("/api/deleteHr", deleteHr)
// e.GET("/comment", commentHandler)
}
itil/hr.go (路由处理方法)
package itil
import (
"fmt"
"net/http"
"testGin/db"
"github.com/gin-gonic/gin"
// "github.com/jinzhu/gorm"
// _ "github.com/jinzhu/gorm/dialects/mysql"
)
type TridentHrManage struct {
ID int
Um string
Username string
}
func getHrData(c *gin.Context) {
var users []TridentHrManage
var db = db.DbObj()
if db == nil {
fmt.Println("conn db err: ")
c.JSON(http.StatusOK, gin.H{
"message": "Hello www.topgoer.com",
"status": 0,
"error": "conn err",
})
} else {
db.Find(&users)
defer db.Close()
c.JSON(http.StatusOK, gin.H{
"message": "success",
"status": 1,
"error": "",
"data": users,
})
}
// c.JSON(http.StatusOK, gin.H{
// "message": "Hello www.topgoer.com",
// })
}
func getHrDetail(c *gin.Context) {
id := c.Query("id")
fmt.Println(c)
var users []TridentHrManage
var db = db.DbObj()
if db == nil {
fmt.Println("conn db err: ")
c.JSON(http.StatusOK, gin.H{
"message": "Hello www.topgoer.com",
"status": 0,
"error": "conn err",
})
} else {
db.Where("ID = ?", id).First(&users)
defer db.Close()
c.JSON(http.StatusOK, gin.H{
"message": "success",
"status": 1,
"error": "",
"data": users,
})
}
}
func EditHr(c *gin.Context) {
// var id int
var js TridentHrManage
var id int
var um string
var username string
if c.ShouldBindJSON(&js) == nil {
if js.Um != "" && js.Username != "" {
id = js.ID
um = js.Um
username = js.Username
} else {
c.JSON(http.StatusOK, gin.H{
"message": "不能为空",
"status": 0,
"error": "不能为空",
})
}
} else {
c.JSON(http.StatusOK, gin.H{
"message": "不能为空",
"status": 0,
"error": "不能解释json格式",
})
}
// data, _ := ioutil.ReadAll(c.Request.Body)
// fmt.Printf("ctx.Request.body: %v", string(data))
// id := c.Query("id")
// um := c.Query("um")
// username := c.Query("username")
// fmt.Println(c)
// fmt.Println("fffff")
// fmt.Println(um)
// fmt.Println(data)
// // fmt.Println(c.Request.Body.GET("um"))
// fmt.Printf("%T", string(data))
// json.Unmarshal([]byte(str), &data)
var users []TridentHrManage
var db = db.DbObj()
defer db.Close()
if db == nil {
fmt.Println("conn db err: ")
c.JSON(http.StatusOK, gin.H{
"message": "Hello www.topgoer.com",
"status": 0,
"error": "conn err",
})
} else {
// fmt.Println(id)
// fmt.Printf("%T", id)
if id == 0 {
user := &TridentHrManage{Um: um, Username: username}
db.Create(user)
// defer db.Close()
fmt.Println(user.ID)
c.JSON(http.StatusOK, gin.H{
"message": user.ID,
"status": 1,
"error": "",
"data": "add",
})
} else {
fmt.Print("update..")
db.Where("id = ?", id).First(&users).Update("um", um).Update("username", username)
// fmt.Println(&users)
// db.Model(&users[0]).Update("um", um)
// db.Model(&users[0]).Update("username", username)
// defer db.Close()
c.JSON(http.StatusOK, gin.H{
"message": "success",
"status": 1,
"error": "",
"data": "update",
})
}
}
}
func deleteHr(c *gin.Context) {
// var id int
var js TridentHrManage
var id int
if c.BindJSON(&js) == nil {
if js.ID > 0 {
id = js.ID
} else {
c.JSON(http.StatusOK, gin.H{
"message": "不能为空",
"status": 0,
"error": "不能为空或0",
})
}
} else {
c.JSON(http.StatusOK, gin.H{
"message": "不能为空",
"status": 0,
"error": "不能解释json格式",
})
}
var db = db.DbObj()
defer db.Close()
if db == nil {
fmt.Println("conn db err: ")
c.JSON(http.StatusOK, gin.H{
"message": "Hello www.topgoer.com",
"status": 0,
"error": "conn err",
})
} else {
user := &TridentHrManage{ID: id}
db.Delete(user)
// fmt.Println(&users)
// db.Model(&users[0]).Update("um", um)
// db.Model(&users[0]).Update("username", username)
// defer db.Close()
mess := "delete id:" + string(id) + " success"
c.JSON(http.StatusOK, gin.H{
"message": "success",
"status": 1,
"error": "",
"data": mess,
})
}
}
数据库连接使用gorm:
db/dbUtil.go
package db
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
func DbObj() *gorm.DB {
// var db *gorm.DB
db, err := gorm.Open("mysql",
"root:my-iflow-123@tcp(10.25.173.36:32704)/test1?charset=utf8&parseTime=True&loc=Local")
if err != nil {
fmt.Println(err)
defer db.Close()
return db
} else {
fmt.Println("connection succedssed")
db.SingularTable(true)
// var users []TridentHrManage
// db.Find(&users)
// fmt.Println(users)
// user := new(TridentHrManage)
}
// defer db.Close()
return db
}
main.go
package main
import (
"fmt"
"testGin/itil"
"testGin/routers"
)
func main() {
// 加载多个APP的路由配置
routers.Include(itil.Routers)
// 初始化路由
r := routers.Init()
if err := r.Run(); err != nil {
fmt.Println("startup service failed, err:%v\n", err)
}
}
浙公网安备 33010602011771号