Web framework-Gin

news2024/11/24 6:22:53

一、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 main

import (
	"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 main

import (
	"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 main

import (
	"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 main

import (
	"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.coloradmin.cn/o/873698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【报童模型】随机优化问题二次规划

面对需求的不确定性&#xff0c;报童模型是做库存优化的常见模型。而标准报童模型假设价格是固定的&#xff0c;此时求解一个线性规划问题&#xff0c;可以得到最优订货量&#xff0c;这种模型存在局限性。因为现实世界中价格与需求存在一定的关系&#xff0c;本文假设需求q是价…

FreeRTOS源码分析-12 低功耗管理

目录 1 STM32低功耗管理概念及应用 1.1睡眠模式 1.2 停止模式 1.3 待机模式 2 Tickless低功耗管理 2.1 Tickless低功耗模式介绍 2.2 FreeRTOS低功耗模式配置 2.3 FreeRTOS低功耗模式应用 3 低功耗管理实际项目开发 3.1 低功耗设计必须要掌握的硬件知识 …

leetcode 1049. 最后一块石头的重量 II

2023.8.13 与分割等和子集类似&#xff0c;可以转化为0-1背包问题。 本题也是需要将数组元素分成两堆&#xff0c;区别在于本题需要使这两堆的差值最小&#xff0c;而之前那题是需要两堆差值为0。 使用之前的一维dp数组的思路&#xff0c;代码如下&#xff1a; class Solution…

开发一个RISC-V上的操作系统(八)—— 抢占式多任务(Preemptive Multitasking)

目录 一、抢占式多任务 二、代码实现 三、上板测试 本节的代码在仓库的 06_Preemptive_Muti_Task 目录下&#xff0c;仓库链接&#xff1a;riscv_os: 一个RISC-V上的简易操作系统 本文代码的运行调试会在前面开发的RISC-V处理器上进行&#xff0c;仓库链接&#xff1a;cpu_…

heap pwn 入门大全 - 1:glibc heap机制与源码阅读(上)

本文为笔者学习heap pwn时&#xff0c;学习阅读glibc ptmalloc2源码时的笔记&#xff0c;与各位分享。可能存在思维跳跃或错误之处&#xff0c;敬请见谅&#xff0c;欢迎在评论中指出。本文也借用了部分外网和其他前辈的素材图片&#xff0c;向各位表示诚挚的感谢&#xff01;如…

MySQL修改编码

插入中文乱码,我电脑上没有出现&#xff0c;我只是来记录一下 MySQL版本: 8.0.34Windows 查看编码 mysql中输入下面的命令 show variables like ‘character_%’; 乱码的一般是图片中划红线的部分不是utf8 character_set_database是设置数据库的默认编码的 character_set_ser…

面试热题(回文链表)

给定一个链表的 头节点 head &#xff0c;请判断其是否为回文链表。 如果一个链表是回文&#xff0c;那么链表节点序列从前往后看和从后往前看是相同的。 回文链表类似于回文串&#xff0c;正读倒读的顺序是一样的&#xff0c;那么我们怎么去判断一个链表是否是回文链表呢&…

7.2.tensorRT高级(2)-学习深度学习中涉及的线程知识

目录 前言1. 多线程2. 问答环节2.1 线程启动相关问题2.2 线程启动函数参数相关问题 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次…

7. 延迟队列

延迟队列 7.1. 延迟队列概念 延时队列,队列内部是有序的&#xff0c;最重要的特性就体现在它的延时属性上&#xff0c;延时队列中的元素是希望 在指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的 元素的队列。 7…

第二章-算法

第二章-算法 数据结构和算法的关系 算法是解决特定问题求解步骤的描述&#xff0c;在计算机中表现为指令的有限序列&#xff0c;并且每条指令表示一个或多个操作。 算法的特性 算法有五个基本特征&#xff1a;输入、输出、有穷性、确定性和可行性。 输入&#xff1a;算法具…

LVS集群和nginx负载均衡

目录 1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡。 1、基于 CentOS 7 构建 LVS-DR 群集。 1.部署LVS负载调度器 1>安装配置工具 [rootnode6 ~]# yum install -y ipvsadm 2>配置LVS虚拟IP&#xff08;VIP地址&#xff09; [rootnode6 ~]# ifconfig ens…

Tesseract用OpenCV进行文本检测

我没有混日子&#xff0c;只是辛苦的时候没人看到罢了 一、什么是Tesseract Tesseract是一个开源的OCR&#xff08;Optical Character Recognition&#xff09;引擎&#xff0c;OCR是一种技术&#xff0c;它可以识别和解析图像中的文本内容&#xff0c;使计算机能够理解并处理…

Dalsa线阵相机说明(Linea Color GigESeries 2k and 4K)

文章目录 一. Dalsa相机软件整体架构二. 相机编号说明以及软件要求三. 相机硬件参数三. 相机基本参数四. 软件参数设置列表1. Sensor Control Category2. I/O Control Category3. Counter and Timer Control Category4. Advanced Processing Control Category(1) 平场校正介绍(…

蚂蚁聚合支付系统源码完美版+附安装教程

这是我上个月花重金购买的四fang系统源码&#xff0c;现在分享给大家。 源码内附安装教程&#xff0c;20多项功能及安全方面的更新文档&#xff0c;源码说明等&#xff0c;小白也能轻松搭建。 能够轻松应对高并发&#xff0c;等以前版本无法应对的并发问题&#xff0c;也不会被…

JIRA:项目管理的秘密武器

引言 在当今动态且快速变化的商业环境中&#xff0c;项目管理已经成为任何组织成功的关键因素。能够有效地管理项目&#xff0c;保证项目在设定的时间和预算内按照预期的质量完成&#xff0c;是每个项目经理的目标。为了实现这个目标&#xff0c;项目经理需要依赖强大的工具&a…

由于找不到vcruntime140_1.dll,无法继续执行代码该怎么修复呢?

我最近遇到了一个vcruntime140_1.dll的问题&#xff0c;导致我的某些应用程序无法正常运行。当我第一次遇到这个问题时&#xff0c;我对这个dll文件的作用一无所知。我开始搜索并了解了vcruntime140_1.dll是Microsoft Visual C Redistributable的一部分&#xff0c;并为使用Vis…

FreeRTOS(计数信号量)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、计数信号量的定义与应用 1、计数信号量的定义 2、计数信号量的应用 二、计数信号量的运作机制 1、任务间计数信号量的实现 三、计数信号量常用的API函数 1、计数信号量典型流程…

泛型编程| 模板初阶——懒人福音!

目录 前言介绍 函数模板 函数模板格式 函数模板的原理 函数模板的实例化 隐式实例化 显示实例化 模板参数匹配规则 类模板 总结 前言介绍 之前c语言实现swap函数的时候&#xff0c;我们不仅要修改参数的类型&#xff0c;还要修改函数的名字 而在学完函数重载之后&am…

东南大学齿轮箱故障诊断(Python代码,MSCNN结合LSTM结合注意力机制模型,代码有注释)

运行代码要求&#xff1a; 代码运行环境要求&#xff1a;Keras版本>2.4.0&#xff0c;python版本>3.6.0 1.东南大学采集数据平台&#xff1a; 数据 该数据集包含2个子数据集&#xff0c;包括轴承数据和齿轮数据&#xff0c;这两个子数据集都是在传动系动力学模拟器&am…

Android JNI实现锅炉压力显示系统详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 第一步创建GuoLu.c文件 // // Created by DELL on 2023/8/13. // #include <stdio.h…