换了新公司,换了新电脑,换了新的编程语言,开始另一阶段的学习。
安装
在使用gin之前,需要在本地配置gin的开发环境
安装:go get github.com/gin-gonic/gin
使用
gin是go语言下的web开发框架,通过一个小demo先熟悉下使用方法
package main
import (
"github.com/gin-gonic/gin"
"net/http"
"github.log"
"os"
"io"
)
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello world") })
router.GET("/user/:name", func(context *gin.Context) {
name := context.Param("name")
context.String(http.StatusOK, "Hello %s", name)
})
//?*标示含义
router.GET("/user/:name/*param", func(context *gin.Context) {
param := context.Param("param")
name := context.Param("name")
context.String(http.StatusOK, "hello,%s %s", name, param)
})
//《---以上是请求路径的路由转发
router.GET("/user", func(context *gin.Context) {
firstname := context.DefaultQuery("firstname", "default")
lastname := context.Query("lastname")
context.String(http.StatusOK, "hello $s $s", firstname, lastname)
})
//《---从get请求中获取请求参数
router.POST("/user/post", func(context *gin.Context) {
message := context.PostForm("message")
nick := context.DefaultPostForm("nick", "default")
context.JSON(http.StatusOK, gin.H{
"status_code": http.StatusOK,
"status": "ok",
"message": message,
"nick": nick,
})
})
////《---获取Post请求内容,并返回json结果
router.LoadHTMLGlob("templates/*")
router.GET("uploadFile", func(context *gin.Context) {
context.HTML(http.StatusOK, "upload.html", gin.H{})
})
router.POST("/upload", func(context *gin.Context) {
log.Info("upload--")
file, header, err := context.Request.FormFile("upload")
if err != nil {
context.String(http.StatusBadRequest, "Bad request")
return
}
filename := header.Filename
out, err := os.Create(filename)
if err != nil {
log.Fatal("error", err)
}
defer out.Close()
_, err = io.Copy(out, file)
if err != nil {
log.Fatal(err)
}
context.String(http.StatusCreated, "upload success")
})
//《---文件上传和gtml页面展示
//分组路由(请求路径/v1/login)
v1 := router.Group("/v1")
v1.GET("/login", func(context *gin.Context) {
context.String(http.StatusOK, "v1 login")
})
router.Run(":8000")
}
前端参数解析
Get请求 Bind Query Post请求 Bind
Bind Get请求会使用Form
func Default(method, contentType string) Binding {
if method == "GET" {
return Form
}
switch contentType {
case MIMEJSON:
return JSON
case MIMEXML, MIMEXML2:
return XML
case MIMEPROTOBUF:
return ProtoBuf
case MIMEMSGPACK, MIMEMSGPACK2:
return MsgPack
default: //case MIMEPOSTForm, MIMEMultipartPOSTForm:
return Form
}
}
Post请求会根据content-type的不同来使用不同的绑定方式