zoukankan      html  css  js  c++  java
  • 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)
    	}
    }
    

      

  • 相关阅读:
    git本地分支管理
    SpringMVC的第一个入门案例
    原来热加载如此简单,手动写一个 Java 热加载吧
    Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
    SpringBoot 开发案例之参数传递的正确姿势
    MENU Java 中的 final、finally、finalize 有什么不同?
    Java Web 学习(1) —— Servlet
    Spring 基础知识学习
    SpringBoot中如何灵活的实现接口数据的加解密功能?
    Java中常用的四种线程池
  • 原文地址:https://www.cnblogs.com/fengzaoye/p/13355452.html
Copyright © 2011-2022 走看看