概述
一、gin 下载:
命令:go get -u github.com/gin-gonic/gin
注意:需要配置代理,因为屏蔽了。配置env, go env -w XXX=???
GO111MODULE=on
GOPROXY=https://goproxy.cn,direct
更改了环境变量后,就可以用go get下载,但是如果用的是module(下载的包会放到pkg文件夹下,需要mod自动导包),那么就需要创建项目,并初始化mod,再下载
比如:GOPATH/ginobject
GOPATH/ginobject/main/main.go
1.在GOPATH/ginobject/main下go mod init(初始化),
2.并go get 下载gin(go get -u github.com/gin-gonic/gin):本人采坑,在main.go无法导入gin包,需要在此处命令行重新下载gin包,mod文件中会有下载包记录,才能导包成功。
二、开启gin的http引擎(快速搭建服务器)
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
//1.初始化engine
engine := gin.Default()
//2.路由及对应的控制器
engine.Handle("GET","/hello", func(context *gin.Context) {
context.Writer.Write([]byte("hello world!"))
})
//3.engine开始执行
engine.Run()
}
1.初始化得到Engine,它是一个结构体变量。gin.Default()
2.Handle是创建一个访问连接的处理器方法(控制器)
参数1:请求方法 GET 、POST、DELETE、PUT.......
参数2:请求的url ,如:"/hello" 访问连接 http://localhost:8080/hello
参数3:回调函数,处理此连接的逻辑,参数context包含了请求的各方面的信息和方法
对于请求:engine还提供了 Get()和Post()等方法,参数是:url,func。与handle方法差不多,只是请求方法用参数形式来对应。
3.返回内容到客户端:context.Writer.Write([]byte("hello world!")),参数是切片
4.执行engine: Run()方法,参数可以更改访问端口 比如改为8081 ,参数写“:8081”,返回error。
三、gin接收请求参数
1.get请求中接收单个请求参数:context.DefaultQuery("name","hello"),方法里第一个是参数名,第二个是参数没有时默认为hello
2.post请求中接收单个请求参数:context.PostForm("name") 没有默认值
3.get和post参数绑定结构体批量接收,即将接收的参数批量导入到结构体变量中。
get访问连接:http://localhost:8080/hello?name=tom&classes=123班
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
)
//Student 接收参数的结构体
type Student struct{
Name string `form:"name" binding:"required"` //form-接收的对应参数名,binding-required 毕传参数
Classes string `form:"classes"`
}
func main() {
engine := gin.Default()
engine.Handle("GET","/hello", func(context *gin.Context) {
fmt.Println(context.FullPath()) //请求的路径
var student Student //声明结构体变量
err := context.ShouldBindQuery(&student) //绑定并接收参数,传结构体地址(指针操作)
if err != nil {
log.Fatal(err)
}
context.Writer.Write([]byte("hello world!"+student.Name))
})
engine.Run()
}
4.通过json格式方式提交表单,批量接收参数
与上面的示例差不多,只是绑定结构体变量的方法不同:context.BindJson(&student),
通过postman发送post请求,请求参数如下:
需要注意的是:参数数据类型要对应上,比如 age:18,对应结构的的Age int
四、返回请求数据格式,(返回给客户端的数据)
1.返回切片数据 []byte :context.Writer.Write([]byte("hello 中国"))
2.返回string数据:context.Writer.WriterJson("hello wold")
3.将map类型变量转换成json,返回json格式给客户端 context.Json()
4.将struct结构体类型变量转换成json,返回json格式给客户端
5.返回html格式页面数据
map数据json返回示例:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
engine := gin.Default()
engine.Handle("GET","/hellojson", func(context *gin.Context) {
fullPath := "请求路径:"+context.FullPath() //请求的路径
//将map数据转成json发送给客户端
context.JSON(200,map[string]interface{}{
"code":1,
"message":"ok",
"data":fullPath,
})
})
engine.Run(":8090")
}
返回结果:
struct数据json返回示例:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
engine := gin.Default()
engine.Handle("GET","/jsonstruct", func(context *gin.Context) {
fullPath := "请求路径"+context.FullPath() //请求的路径
//将结构体转接送返回
resp := Resp{Code:1,Message:"ok",Data:fullPath} //结构体数据
context.JSON(200,&resp) //Json方法的第二个参数是 interface
})
engine.Run(":8090")
}
type Resp struct {
Code int
Message string
Data interface{}
}
返回结果:
返回html格式
示例代码:
项目目录:gin/main/main.go gin/temp/index.html
main.go代码
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
engine := gin.Default()
engine.LoadHTMLGlob("./../temp/*")
engine.Handle("GET","index", func(context *gin.Context) {
fullPath := "请求路径"+context.FullPath() //请求的路径
context.HTML(http.StatusOK,"index.html",gin.H{
"path":fullPath,
"title":"html页面",
})
})
engine.Run(":8090")
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{.title}}</title>
</head>
<body>
<h1>{{.path}}</h1>
</body>
</html>
注意:engine.LoadHTMLGlob("./../temp/*") main.go文件开始的相对路径,到模板文件夹, *号为通配符
五、gin模板静态资源引入
gin静态资源引入,需要后端做路径的映射
跟上面的案列的项目目录结构一样,
gin/main/main.go
gin/temp/index.html
gin/static/test.jpg
模板文件中加入img标签 src="/imgstatic/test.jpg"
main.go 中 engine.Static("/imgstatic","./../static") 要注意Static两个参数是映射关系, 即将模板路径中的"/imgstatic"字符串 替换成"./../static",那么最后模板的路径会映射成"./../static/test.jpg"
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
engine := gin.Default()
engine.LoadHTMLGlob("./../temp/*")
engine.Static("/imgstatic","./../static") //把模板中的"/imgstatic/test.jpg" 替换成 "./../static/test.jpg"
engine.Handle("GET","index", func(context *gin.Context) {
fullPath := "请求路径"+context.FullPath() //请求的路径
context.HTML(http.StatusOK,"index.html",gin.H{
"path":fullPath,
"title":"html页面",
})
})
engine.Run(":8090")
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{.title}}</title>
</head>
<body>
<h1>{{.path}}</h1>
<div><img src="/imgstatic/test.jpg" alt=""></div>
</body>
</html>
最后
以上就是现实菠萝为你收集整理的go gin框架(1),http一、gin 下载:二、开启gin的http引擎(快速搭建服务器)三、gin接收请求参数四、返回请求数据格式,(返回给客户端的数据)五、gin模板静态资源引入的全部内容,希望文章能够帮你解决go gin框架(1),http一、gin 下载:二、开启gin的http引擎(快速搭建服务器)三、gin接收请求参数四、返回请求数据格式,(返回给客户端的数据)五、gin模板静态资源引入所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复