Web framework-Gin

一、Gin

Go Web--Go Module

        软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

        框架就是:偷懒的程序员,写代码发现写过了写的就是那些玩意,码农,只是代码的搬运工,干脆将代码进行封装, 之后进行重复使用的过程。

        使用框架,可以大大的提升开发的效率。
        其实用GO语言标准库就可以完成web开发,但是为什么使用框架呢?框架就是一个别人搭建好的舞台,有很多现成的工具可以提供给你用,你在此基础上开发效率肯定更高。

Go的Web框架分两派:
一派是基于标准库net/http的,比如gin-gonic/gin,labstack/echo,astaxie/beego
一派是基于valyala/fasthttp的,更偏向于性能,比如kataras/ iris , gofiber/fiber

1、Gin框架

Gin框架文档说明

2、新建Gin项目

Go Web--Go Module

1、下载并安装 gin:

go get -u github.com/gin-gonic/gin

2、测试代码

package mainimport ("github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.GET("/test", func(c *gin.Context) {c.JSON(200, gin.H{"msg": "test Gin success",})})r.Run()
}

访问测试http://localhost:8080/test

3、运行原理

package mainimport ("github.com/gin-gonic/gin"
)func Test(c *gin.Context) {c.JSON(200, gin.H{"msg": "test Gin success",})
}func main() {//Default()返回的是一个引擎Engine,它是框架非常重要的数据结构,是框架的入口。//引擎 - 框架核心发送机 - 默认服务器 - 整个web服务都是由它来驱动的//Default()底层调用了New(),相当于New()的升级,New()返回的是一个引擎,//在此基础上多增加了中间件处理-engine.Use(Logger(), Recovery())r := gin.Default()//r := gin.New()//路由:通过访问"/test"的GET请求走这一条处理逻辑,走对应的函数中的内容//"/test" : 路由规则  函数:路由函数//路由请求方式:GET、POST、DELETE、PATCH、PUT、OPTIONS、HEAD、Any//函数:可以直接写匿名函数,还可以在外部定义函数使用//r.GET("/test", func(c *gin.Context) {//	c.JSON(200, gin.H{//		"msg": "test Gin success",//	})//})r.GET("/test", Test)//启动引擎 ,服务器启动//Run可以传入参数:host+port//中间拼接的冒号一定不要忘记//r.Run()r.Run(":9999")//r.Run("192.168.0.171:9999")
}

启动测试

4、数据交互

4.1、模板文件

1、Engine的LoadHTMLFiles方法:(不推荐)
func (engine *Engine) LoadHTMLFiles(files ...string) {
加载子指定的模板文件
不定长参数,可以传多个字符串,使用这个方法需要指定所有要使用的html文件路径
2、Engine的LoadHTMLGlob方法:(推荐)
func (engine *Engine) LoadHTMLGlob(pattern string) {
加载子文件夹下的模板文件
只有一个参数,通配符,如:templates/* ,意思是找当前项目路径下templates文件夹下所有的html文件
3、渲染HTML模板文件:Context的HTML方法:
func (c *Context) HTML(code int, name string, obj any) {
第一个参数:状态码
第二个参数:渲染的文件名
第三个参数:传入参数,空接口可以接受任意类型

HTTP状态码

创建templates文件夹下新建hello01.html和hello02.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>Hello01 World!
</body>
</html>
package mainimport ("github.com/gin-gonic/gin"
)func Test(context *gin.Context) {context.HTML(200, "hello01.html", nil)
}func main() {r := gin.Default()//加载文件//r.LoadHTMLFiles("templates/hello01.html", "templates/hello02.html")r.LoadHTMLGlob("templates/*")r.GET("/test", Test)r.Run()
}

启动测试

 多级目录模板指定

1、如果有多级目录,比如templates下有demo01和demo02两个目录,如果要使用里面的html文件,
必须得在Load的时候指定多级才可以,
比如:
r.LoadHTMLGlob("templates/**/*")2、指定html文件,除了第一级的templates路径不需要指定,后面的路径都要指定
context.HTML(200, "demo02/hello02.html", nil)
3、在html中define定义目录
{{define "demo02/hello02.html"}}
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>Demo02 Hello02 World!
</body>
</html>
{{end}}

package mainimport ("github.com/gin-gonic/gin"
)func Test(context *gin.Context) {context.HTML(200, "demo02/hello02.html", nil)
}func main() {r := gin.Default()//加载文件//r.LoadHTMLFiles("templates/hello01.html", "templates/hello02.html")r.LoadHTMLGlob("templates/**/*")r.GET("/test", Test)r.Run()
}

启动测试

 

 

Golang学习+深入(一)

永远不要让无法完全信任的人知道你真正的实力有多少!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/65989.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hugging Face 的文本生成和大语言模型的开源生态

[更新于 2023 年 7 月 23 日: 添加 Llama 2。] 文本生成和对话技术已经出现多年了。早期的挑战在于通过设置参数和分辨偏差&#xff0c;同时控制好文本忠实性和多样性。更忠实的输出一般更缺少创造性&#xff0c;并且和原始训练数据更加接近&#xff0c;也更不像人话。最近的研…

webpack中常见的Loader

目录 1.webpack中的loader是什么&#xff1f;配置方式 2. loader特性3.常见的loader 1.webpack中的loader是什么&#xff1f; loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分…

优化堆排序(Java 实例代码)

目录 优化堆排序 Java 实例代码 src/runoob/heap/HeapSort.java 文件代码&#xff1a; 优化堆排序 上一节的堆排序&#xff0c;我们开辟了额外的空间进行构造堆和对堆进行排序。这一小节&#xff0c;我们进行优化&#xff0c;使用原地堆排序。 对于一个最大堆&#xff0c;首…

selenium常见等待机制及其特点和使用方法

目录 1、强制等待 2、隐式等待 3、显示等待 1、强制等待 强制等待是在程序中直接调用Thread.sleep(timeout) ,来完成的&#xff0c;该用法的优点是使用起来方便&#xff0c;语法也比较简单&#xff0c;缺点就是需要强制等待固定的时间&#xff0c;可能会造成测试的时间过…

从零开始学习 Java:简单易懂的入门指南之抽象类接口内部类(十一)

面向对象进阶&#xff08;抽象类&接口&内部类&#xff09; 第一章 抽象类1.1 概述1.1.1 抽象类引入 1.2 abstract使用格式1.2.1 抽象方法1.2.2 抽象类1.2.3 抽象类的使用 1.3 抽象类的特征1.4 抽象类的细节1.5 抽象类存在的意义 第二章 接口2.1 概述2.2 定义格式2.3 接…

Linux目录结构(快速了解)

linux目录结构 核心 1.Linux一切皆文件 2.只有一个顶级目录&#xff0c;而windows分C盘、D盘等 目录结构 目录含义&#xff08;与windows进行比对&#xff09; Linux含义windows/bin所有用户可用的基本命令存放的位置windows无固定的命令存放目录/bootlinux系统启动的时候需要…

设计模式(5)代理模式

一、介绍&#xff1a; 【Subject/抽象角色】定义了RealSubject和Proxy的共用接口&#xff0c;这样就可以在任何使用RealSubject的地方都可以使用Proxy 【RealSubject/真实角色】定义Proxy所代表的真实实体 【Proxy/代理角色】保存一个引用使得代理可以访问实体&#xff0c;并…

扬起的沙尘如何形成卷云

被气旋吹到空中的沙尘为冰云的形成提供了成核粒子。 卷云是由空气中的冰粒形成的。 卷云是由纯冰粒子组成的高云&#xff0c;主要在8-17 公里高空出现。 这些云通过散射入射的阳光和吸收地球发出的红外辐射&#xff0c;对地球的气候产生重要影响。 在一项最新的研究中&#xf…

布置Zabbix监控

一、在 Web 页面中添加 agent 主机 1.1打开Zabbix的Web页面 2.2在 Web 页面中添加 agent 主机 二、在 Web 页面创建自定义监控项模板 2.1创建模版

[保研/考研机试] KY35 最简真分数 北京大学复试上机题 C++实现

题目链接&#xff1a; 最简真分数https://www.nowcoder.com/share/jump/437195121691719749588 描述 给出n个正整数&#xff0c;任取两个数分别作为分子和分母组成最简真分数&#xff0c;编程求共有几个这样的组合。 输入描述&#xff1a; 每组包含n&#xff08;n<600&…

Spring BeanPostProcessor 接口的作用和使用

BeanPostProcessor 接口是 Spring 框架中的一个扩展接口&#xff0c;用于在 Spring 容器实例化、配置和初始化 bean 的过程中提供自定义的扩展点。通过实现这个接口&#xff0c;您可以在 bean 实例创建的不同生命周期阶段插入自己的逻辑&#xff0c;从而实现对 bean 行为的定制…

Spring Boot 集成 XXL-JOB 任务调度平台

一、下载xxl-job并使用。 二、将xxl-job集成到springboot里 一、 下载xxl-job并使用。 这一步没完成的请参考这个博客&#xff1a;http://t.csdn.cn/lsp4r 二、将xxl-job集成到springboot里 1、引入依赖 <dependency><groupId>org.springframework.boot</group…