Перейти узнать --Web рамки сборки Gin

До того времени, чтобы узнать Java, Spring и семья ведро заложить хорошие отношения на линии, от Spring, Spring MVC в SpringBoot, того же штамма.

Для веб-проекта, используя Spring MVC, MVC будет основана на идее развития проекта, является ли это иметь дело с до и после окончания сцены разделения или нет разделения, вы можете легко управлять. Потому что вы просто знаете, что вы используете среду разработки Web на линии.

По сравнению с Spring Java в доминирующем положении, Go Экология веб-рамки еще соперничающих стадии. Начиная с сегодняшнего дня обучения Веб-разработка основы Gin развития языка Go.

Краткое введение

Github: https: //github.com/gin-gonic/gin

Язык: Go Язык

Официальный сайт: https: //gin-gonic.com/

 

Окружающая среда для сборки

Go Версия: 1.12.4

Система: MacOS

инструмент управления Dependency: идти моды

IDE: Goland

Потому что я использовал идти моды, так что ссылки на джин зависимость считается очень удобным.

Как создать новый проект идти по модулю управления и как превратить старые вещи пойти моды, вы можете увидеть эту статью: https: //juejin.im/post/5c8e503a6fb9a070d878184a, написанную в деталях.

Это мой гоу-демонстрация: https: все третья сторона проект //github.com/DMinerJackie/go-demo полагался.

Так что все зависит, как добавить джин? Есть три способа

  • Создание прямого примера джин на основе программного файла, а затем выполнить или команда, идти моды автоматически помогут вам скачать и обновление go.mod джин полагаться файлом.go build xxx.gogo run xxx.go

  • Выше, или создать новый файл пример программы, а затем выполнить корневую директорию проекта go mod tidyкоманды, идти моды помогут вам организовать на. Эта команда может помочь вам удалить ненужную зависимость, и тянуть цитаты полагаться на ваши потребностях.

  • В go.mod файл вручную добавить зависимость аналогична таковой.github.com/gin-gonic/gin v1.4.0

Почти все без громоздких шагов для завершения среды сборки. Далее начал писать первый из Gin на основе демо

 

Первое демо

1, новый файл helloworld.go

Основной пакет 

Импорт "github.com/gin-gonic/gin" 

FUNC Основной () { 
	Р & л: = gin.Default () 
	r.get ( "/ пинг", FUNC (С * gin.Context) { 
		c.JSON (200 , gin.H { 
			"Сообщение": "Pong", 
		}) 
	}) 
	r.Run () // и начать слушать службу на 0.0.0.0:8080 
}

  

2. Нажмите на реализацию программы

Как видно из службы консольной программы началась, и начинает слушать порт 8080

3, интерфейс доступа

Далее мы вступаем локальный в браузере: 8080 / пинг вы можете увидеть результаты возвращения программ

Минималистский настроить веб-сервер, так и полного зарубежного визита.

Приведенный выше код

При объявлении джин двигатель, последующие операции основаны на этом движке.r:=gin.Default()

По объявить маршрут , который можно получить доступ, HTTP метод запроса определяется для запроса GET. Также определяет соответствующую обработку запроса, то есть функция закрытия форматого заявление JSON возвращается пара ключей.r.GET

При прослушивании на указанный порт и запустить службуr.Run()

 

Другое Разное

1, рендеринг HTML

Хотя многие из них выступал и реализованы до и после окончания разделения, и это только обеспечить фоновую HTTP-интерфейс, HTTP интерфейс и отвечают за вызов отрисовки первой страницы.

Но есть сценарии использования до и после окончания РУБ вместе, джин обеспечивает эту возможность.

具体的做法是提供一个HTML模板,服务端将得到的数据填充到模板中实现页面的渲染。

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	router := gin.Default()
	router.LoadHTMLGlob("main/src/gin-example/examples/templates/**/*")
	router.GET("/posts/index", func(c *gin.Context) {
		c.HTML(http.StatusOK, "posts/index.tmpl", gin.H{
			"title": "Posts",
		})
	})
	router.GET("/users/index", func(c *gin.Context) {
		c.HTML(http.StatusOK, "users/index.tmpl", gin.H{
			"title": "Users",
		})
	})
	router.Run(":8080")
}

  

index.tmpl

{{ define "posts/index.tmpl" }}
<html><h1>
	{{ .title }}
</h1>
<p>Using posts/index.tmpl</p>
</html>
{{ end }}

  

user.tmpl

{{ define "users/index.tmpl" }}
<html><h1>
	{{ .title }}
</h1>
<p>Using users/index.tmpl</p>
</html>
{{ end }}

  

对应的HTML模板文件目录结构如下

代码部分

router.LoadHTMLGlob用于指明HTML模板文件的路径

router.GET同上,定义访问路由和返回结果,不同于第一个Demo的是,这里有赋值填充的过程,比如

c.HTML(http.StatusOK, "posts/index.tmpl", gin.H{
			"title": "Posts",
		})

  

将index.tmpl中定义的 .title替换为"Posts"

执行结果如下

2、PureJSON

func main() {
	r := gin.Default()
	
	// 提供 unicode 实体
	r.GET("/json", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"html": "<b>Hello, 世界!</b>",
		})
	})
	
	// 提供字面字符
	r.GET("/purejson", func(c *gin.Context) {
		c.PureJSON(200, gin.H{
			"html": "<b>Hello, 世界!</b>",
		})
	})
	
	// 监听并在 0.0.0.0:8080 上启动服务
	r.Run(":8080")
}

  

这里两个GET方法唯一不同的就是要渲染的内容一个使用JSON()方法一个使用PureJSON()方法。

启动程序后,我们看下访问结果有什么不同

可以看出JSON()渲染的会有中文以及标签转为unicode编码,但是使用PureJSON()渲染就是原样输出(我的浏览器装了插件,会自动解码,所以不点击右边的”RAW“两个接口返回的结果是一样的)。

这个问题,本周我们服务端在和客户端对接的时候还遇到了,因为框架返回的JSON串就是经过编码的,但是单独请求放到浏览器是没有问题的,客户端收到的却是经过编码的,最后排查发现是浏览器插件解码了。

3、渲染多种数据交换格式的数据

gin支持渲染XML、JSON、YAML和ProtoBuf等多种数据格式

import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/testdata/protoexample"
	"net/http"
)

func main() {
	r := gin.Default()

	// gin.H 是 map[string]interface{} 的一种快捷方式
	r.GET("/someJSON", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
	})

	r.GET("/moreJSON", func(c *gin.Context) {
		// 你也可以使用一个结构体
		var msg struct {
			Name    string `json:"user"`
			Message string
			Number  int
		}
		msg.Name = "Lena"
		msg.Message = "hey"
		msg.Number = 123
		// 注意 msg.Name 在 JSON 中变成了 "user"
		// 将输出:{"user": "Lena", "Message": "hey", "Number": 123}
		c.JSON(http.StatusOK, msg)
	})

	r.GET("/someXML", func(c *gin.Context) {
		c.XML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
	})

	r.GET("/someYAML", func(c *gin.Context) {
		c.YAML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
	})

	r.GET("/someProtoBuf", func(c *gin.Context) {
		reps := []int64{int64(1), int64(2)}
		label := "test"
		// protobuf 的具体定义写在 testdata/protoexample 文件中。
		data := &protoexample.Test{
			Label: &label,
			Reps:  reps,
		}
		// 请注意,数据在响应中变为二进制数据
		// 将输出被 protoexample.Test protobuf 序列化了的数据
		c.ProtoBuf(http.StatusOK, data)
	})

	// 监听并在 0.0.0.0:8080 上启动服务
	r.Run(":8080")
}

  

今天先到这,后面再看看gin的源码。

 

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

рекомендация

отwww.cnblogs.com/bigdataZJ/p/gin-helloworld.html