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
}