我是靠谱客的博主 现实菠萝,最近开发中收集的这篇文章主要介绍go gin框架(1),http一、gin 下载:二、开启gin的http引擎(快速搭建服务器)三、gin接收请求参数四、返回请求数据格式,(返回给客户端的数据)五、gin模板静态资源引入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、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模板静态资源引入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部