gin

2020-11-30  本文已影响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
}
上一篇下一篇

猜你喜欢

热点阅读