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
", err)
	}
}

  

原文地址:https://www.cnblogs.com/fengzaoye/p/13355452.html