gin

作者: 秃头小公主 | 来源:发表于2020-11-30 11:54 被阅读0次

    大概有几天不写了,是因为接了个算法培训的小任务,写了些资料和ppt什么的,让后就耽搁的。现在还得回归正题来学习go中的gin框架(有需求,不然我真的想学beego)。对了,我终于弄明白gopath和gomod了,可喜可贺啊。等再透彻一下,我再写文章。因为我是学习了go-web的,所以接下来的学习基础是按照我博客的顺序一步一步来的。


    import (
        "github.com/gin-gonic/gin"
        "net/http"
    )
    func main() {
        router:=gin.Default()//创建gin的实例,相当于创建了个一个handler
        //就是输入网址“/”,让后调用函数。类似于HandleFunc
        router.GET("/", func(c *gin.Context) {//发送get请求,并声明回调函数
            c.String(http.StatusOK,"Hello World")
        })//第一个参数是http状态码,第二个参数是返回到页面的内容
        router.Run(":8080")//locahost:8080
    }
    

    这里插播一条关于常用状态码的知识:
    HttpStatus.OK = 200;//ok
    HttpStatus.BAD_REQUEST = 400;//错误的请求
    HttpStatus.FORBIDDEN = 403;//禁止
    HttpStatus.NOT_FOUND = 404;//没有找到
    HttpStatus.REQUEST_TIMEOUT = 408;//请求超时
    HttpStatus.SERVICE_UNAVAILABLE =500;//内部服务器错误

    上面的router.Run(":8080")为默认服务器方法,除此之外我们还可以用http.ListenAndServe(),来吃栗子~

    func main() {
        router := gin.Default()
        http.ListenAndServe(":8080", router)
    }
    

    或者来自定义个一个HTTP服务器的配置啵~

    func main() {
        router := gin.Default()
    
        s := &http.Server{
            Addr:           ":8080",
            Handler:        router,
            ReadTimeout:    10 * time.Second,
            WriteTimeout:   10 * time.Second,
            MaxHeaderBytes: 1 << 20,
        }
        s.ListenAndServe()
    }
    

    与此我想说的是,我们第一个小项目算是完成了,不过没有人会像页面传输一个字符串,所以下面我们要做的就是吧字符串的形式改成json

    func main() {
        router:=gin.Default()//创建gin的实例
        router.GET("/", func(c *gin.Context) {
            c.String(200,"Hello World")//http.StatusOK
            c.JSON(200,gin.H{//来了一个json
                "message":"hello world",
            })
        })
        router.Run(":8080")//locahost:8080
    }
    

    之前有介绍gorm吧,其实我之前也做了一个小练习,不用框架就用简单的go-web做一个对数据增删改查操作的api,这次我们用gin试一下

    //main.go
    import (
        "first_web/initRouter"
        _ "github.com/jinzhu/gorm/dialects/mysql"
    )
    
    func main() {
        router:=initRouter.SetupRoter()
        _=router.Run()
    }
    
    //initDB/initDB.go
    import (
        _ "github.com/go-sql-driver/mysql"
        "github.com/jinzhu/gorm"
        "log"
    )
    
    var Db *gorm.DB
    
    func init() {
        var err error
        Db, err = gorm.Open("mysql", "root:AjYn5GDsdM6W@tcp(10.32.1.100:3306)/myt?charset=utf8")
        if err != nil {
            log.Panicln("error:", err.Error())
        }
    }
    
    
    //initRouter/initRouter.go
    import (
        "first_web/handler"
        "github.com/gin-gonic/gin"
    )
    
    func SetupRoter() *gin.Engine {
        router:=gin.Default()
        userRouter:=router.Group("/user")
        {
            userRouter.GET("/add",handler.Addhundler)
            return router
        }
    }
    
    //handler/UserHandler.go
    import (
        "first_web/modle"
        "github.com/gin-gonic/gin"
        "log"
        "net/http"
    )
    func Addhundler(context *gin.Context)  {
        u:=modle.User{}
        id:=u.Add()
        log.Println("id is ", id)
        context.Redirect(http.StatusMovedPermanently, "/")
    }
    
    //modle/user.go
    import (
        "first_web/initDB"
        "fmt"
    )
    type User struct {
        Id       int    `gorm:"primary_key" json:"id"`
        Username string `gorm:"username" json:"username"`
        Phone    string `gorm:"phone" json:"phone"`
    }
    
    func (u *User) Add() int{
        initDB.Db.Create(&u)
        fmt.Println("add success")
        return u.Id
    }
    

    相关文章

      网友评论

          本文标题:gin

          本文链接:https://www.haomeiwen.com/subject/zyrniktx.html