一.Gin框架的安装
上个星期花了几个小时都搞不定,今天就打算把全部文件都给删掉,重新安装试一下,这次我花了好久从CSDN上找资料,找到一个有详细操作的,于是我跟他的思路走,没想到终于成功了(他里面说不用在GOPATH目录下,可能之前我一直都是在GOPATH目录下工作的原因导致我之前操作错误吧)
解决问题的链接:https://blog.csdn.net/qq_35549286/article/details/115870519?ops_request_misc=&request_id=&biz_id=102&utm_term=%22github.com/gin-gonic/gin@v1.7&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-115870519.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187
代码:
package main
import "github.com/gin-gonic/gin"
func main() {
engine := gin.Default()
engine.GET("/", func(context *gin.Context) {
context.String(200, "hello, gin")
})
engine.Run()
}
结果:
二.处理http请求
处理http请求有两种方式:
1.Router方式(个人感觉这种比较容易记住)
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
engine := gin.Default()
engine.GET("/name", func(context *gin.Context) {
fmt.Println(context.FullPath())
name := context.Query("name")
fmt.Println(name)
context.Writer.Write([]byte("你好," + name))
})
engine.POST("/login", func(context *gin.Context) {
name, exist := context.GetPostForm("username")
//这里如果有数据username的话,exist为真
if exist {
fmt.Println(name)
}
password, exist := context.GetPostForm("password")
if exist {
fmt.Println(password)
}
context.Writer.Write([]byte("你好," + name))
})
engine.DELETE("/user/:id", func(context *gin.Context) {
userID := context.Param("id")
context.Writer.Write([]byte("delete userID:" + userID))
})
engine.Run(":9000")
}
结果:
2.Handle方式
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
engine := gin.Default()
//第一个参数表示方式,有:GET,POST等
engine.Handle("GET", "/name", func(context *gin.Context) {
fmt.Println(context.FullPath())
name := context.Query("name")
fmt.Println(name)
context.Writer.Write([]byte("你好," + name))
})
engine.Handle("POST", "/name", func(context *gin.Context) {
name := context.PostForm("username")
password := context.PostForm("password")
fmt.Println(password)
context.Writer.Write([]byte("你好啊," + name))
})
engine.Run(":9000")
}
结果:
多数据处理:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
)
func main() {
engine := gin.Default()
engine.GET("/hello", func(context *gin.Context) {
fmt.Println(context.FullPath())
var student Student
err := context.ShouldBindQuery(&student)
if err != nil {
log.Fatal(err.Error())
return
}
fmt.Println(student.Name)
fmt.Println(student.Sex)
fmt.Println(student.Age)
context.Writer.Write([]byte("你好:" + student.Name))
})
engine.Run()
}
type Student struct {
Name string `form:"name""`
Sex string `form:"sex"`
Age int `form:"age"`
}
结果:
获取数据:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
)
func main() {
engine := gin.Default()
engine.POST("/name", func(context *gin.Context) {
fmt.Println(context.FullPath())
var student Student
err := context.ShouldBind(&student)
if err != nil {
log.Fatal(err.Error())
return
}
fmt.Println(student.Name)
context.Writer.Write([]byte("你好:" + student.Name + " 手机号码: " + student.Phone))
})
engine.Run()
}
type Student struct {
Name string `form:"name""`
Phone string `form:"phone"`
Password int `form:"password"`
}
结果:
获取json格式的数据:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
)
func main() {
engine := gin.Default()
engine.POST("/json", func(context *gin.Context) {
fmt.Println(context.FullPath())
var student Student
//主要是下面这一行代码
err := context.BindJSON(&student)
if err != nil {
log.Fatal(err.Error())
return
}
fmt.Println(student.Name)
context.Writer.Write([]byte("你好:" + student.Name + " 手机号码: " + student.Phone))
})
engine.Run()
}
type Student struct {
Name string `form:"name""`
Phone string `form:"phone"`
Password int `form:"password"`
}
发送:
{
"name":"Alice",
"password":111111,
"phone":"000000"
}
结果: