Gin 框架介绍与快速入门

Gin 框架介绍与快速入门

文章目录

  • Gin 框架介绍与快速入门
    • 一、Gin框架介绍
      • 1. 快速和轻量级
      • 2. 路由和中间件
      • 3. JSON解析
      • 4. 支持插件
      • 5. Gin相关文档
    • 二、基本使用
      • 1.安装
      • 2.导入
      • 3.第一个Gin 应用
    • 三、应用举例
    • 四、Gin 入门核心
      • 1.gin.Engine
      • 2.gin.Context

一、Gin框架介绍

Gin是一个轻量级的Go语言Web框架,它具有高性能和简洁的设计。由于其快速的路由匹配和处理性能,Gin成为Go语言中最受欢迎的Web框架之一。以下是一些Gin框架的主要特点:

1. 快速和轻量级

Gin框架的设计注重性能和效率,采用了一些优化措施,使其成为一个快速而轻量级的框架。

2. 路由和中间件

Gin提供了强大的路由功能,支持参数传递、路由分组等特性。同时,它支持中间件的使用,可以方便地在请求处理过程中执行一系列的操作,比如身份验证、日志记录等。

3. JSON解析

Gin内置了对JSON的解析和序列化的支持,使得处理JSON数据变得简单而高效。

4. 支持插件

Gin允许开发者通过插件来扩展框架的功能,这样可以根据项目的需求进行灵活的定制。

5. Gin相关文档

  • GitHub 地址:https://github.com/gin-gonic/gin
  • 中文文档:https://gin-gonic.com/zh-cn/docs/

二、基本使用

1.安装

下载并安装Gin:

go get github.com/gin-gonic/gin@latest

2.导入

将其导入您的代码中:

import "github.com/gin-gonic/gin"

(可选)导入net/http。例如,如果使用常量,则需要这样做http.StatusOK。

import "net/http"

3.第一个Gin 应用

创建示例工程目录 gin-demo

mkdir gin-demo

目录下新建 gin.go 源文件:

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {// 1. 创建一个默认的Gin引擎server := gin.Default()// 2. 定义路由:当使用 GET 方法访问路径为 /hello 时,执行回调函数server.GET("/hello", func(c *gin.Context) {// 3. 在回调函数中,返回一个字符串 "hello, go" 并设置HTTP状态码为200 OKc.String(http.StatusOK, "hello, go")})// 4. 启动服务,监听在 0.0.0.0:8080 上server.Run(":8080") // 如果不指定端口号,默认为8080
}

代码解释如下:

  1. server := gin.Default(): 创建一个Gin引擎。gin.Default()返回一个带有默认中间件的Gin引擎,包括Logger和Recovery中间件,用于日志记录和恢复。
  2. server.GET("/hello", func(c *gin.Context) {...}): 定义了一个GET方法的路由,当访问路径是/hello时,执行后面的回调函数。这里的回调函数使用gin.Context对象处理HTTP请求和构造HTTP响应。
  3. c.String(http.StatusOK, "hello, go"): 在回调函数中,通过c.String方法返回一个字符串 “hello, go” 并设置HTTP状态码为200 OK。
  4. server.Run(":8080"): 启动Web服务,监听在0.0.0.0:8080。如果不指定端口号,默认使用8080端口。此时,你可以通过浏览器或HTTP客户端访问http://localhost:8080/hello,将会得到 “hello, go” 的响应。

在项目 gin-demo 目录下,执行 go mod init gin-demogo mod tidy 命令完成依赖导入,将自动生产 go.mod 、go.sum 文件。

go mod init gin-demo
go mod tidy

gin-demo 目录执行命令 go run gin.go 启动 gin Web Server:

go run gin.go

看到输出监听端口了,就认为已经启动成功了。

最后通过浏览器访问: http://localhost:8080/hello,就会输出如下:

三、应用举例

以下项目都是使用 Gin 框架开发的:

  • gorush:Go 编写的通知推送服务器。
  • fnproject:容器原生,云 serverless 平台。
  • photoprism:基于 Go 和 Google TensorFlow 实现的个人照片管理工具。
  • krakend:拥有中间件的超高性能 API 网关。
  • picfit:Go 编写的图像尺寸调整服务器。
  • gotify:基于 WebSocket 进行实时消息收发的简单服务器。
  • cds:企业级持续交付和 DevOps 自动化开源平台。

四、Gin 入门核心

1.gin.Engine

Gin 里面,一个 Web 服务器被抽象成为 Engine。你可以在一个应用里面创建多个 Engine 实例,监听不同的端口。Engine 承担了路由注册、接入 middleware 的核心职责。

如图,它组合了 RouterGroupRouterGroup 才是实现路由功能的核心组件。

2.gin.Context

gin.ContextGin 里面的核心类型。应该说,你日常最经常的就是和它打交道。

它的字面意思就是“上下文”,在 Gin 里面,它的核心职责是:

  • 处理请求
  • 返回响应

如图,Request 代表的就是请求,Writer 代表的就是响应。

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

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

相关文章

VitePress搭建Vite官方中文文档首页

✨专栏介绍 在当今数字化时代,Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序,就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术,以及各种框架、库和工具…

FinGPT——金融领域开源大模型

文章目录 背景论文摘要相关工作大型语言模型(LLMs)和ChatGPT金融领域的LLMs为什么需要开源的金融LLMs? 以数据为中心的方法用于FinLLMs金融数据和独特特性应对处理金融数据的挑战 FINGPT 概述:FINLLM 的开源框架数据来源面向金融N…

【常用排序算法】冒泡排序

冒泡排序 冒泡排序基本思想:N 个数的数组,经过N-1轮排序。 升序 大的值下沉,小的值上浮。降序 小的值下沉,小的字上浮 import java.util.Arrays; public class BubbleSort {public static void main(String[] args) {int[] values…

std::scoped_lock` 和 `std::lock() ,condition_variable,promise

std::scoped_lock和std::lock() 同时锁多个mutex std::scoped_lock 和 std::lock() 都是 C 标准库中用于管理多个 std::mutex 对象的工具,但它们在使用方式和一些方面上存在一些区别。以下是它们的主要区别: 用法差异: std::scoped_lock 是一…

Git 对项目更新的时候提示错误 repository not owned by current user

遇到 Git 提示的错误信息为:repository not owned by current user 上图显示的是错误的信息。 问题和解决 出现上面错误信息的原因是当前文件夹的权限和 Git 的执行权限不一直导致的。 我们的问题是我们希望在网盘上使用 Git 更新克隆后的代码,但登录…

React Hook 原理,及如何使用Hook

一、 Hook使用规则 只在最顶层使用Hook 不要在循环,条件或嵌套函数中调用Hook; 只在组件函数和自定义hook中调用Hook Q1 : 为什么 hook 不能 在循环,条件或嵌套函数中调用Hook ? A1: 因为这跟React的…

使用Kafka与Spark Streaming进行流数据集成

在当今的大数据时代,实时数据处理和分析已经变得至关重要。为了实现实时数据集成和分析,组合使用Apache Kafka和Apache Spark Streaming是一种常见的做法。本文将深入探讨如何使用Kafka与Spark Streaming进行流数据集成,以及如何构建强大的实…

【智慧地球】星图地球 | 星图地球超算数据工场

当前空天信息处理涉及并发并行的大量计算问题,需要高性能计算、智能计算联合调度,以此来实现多算力融合;而我国算力产业规模快速增长,超算算力资源正需要以任务驱动来统筹。 基于此,中科星图与郑州中心展开紧密合作&a…

从0开始python学习-39.requsts库

目录 HTTP协议 1. 请求 2. 响应 Requests库 1. 安装 2. 请求方式 2.1 requests.请求方式(参数) 2.2 requests.request() 2.3 requests.session().request() 2.4 三种方式之间的关联 3. 请求参数 3.1 params:查询字符串参数 3.2 data:Form表单…

React格式化规范

React并没有特定的格式要求,它允许开发者根据自己的喜好和项目需求来选择代码的格式化风格。然而,在React社区中有一些常见的约定和最佳实践,以下是一些常用的格式化规范和建议: 缩进:使用2个或4个空格来进行缩进&…

对‘float16_t’的引用有歧义

float16_t 是一个半精度浮点数类型,通常在一些需要高性能和低精度的场合被使用。 如果加了using namespace cv;后,OpenCV库中也有一个名为float16_t的类型定义,与最初的float16_t存在冲突,导致编译失败。 为了解决这个问题&#…

软件测试工程师需要掌握的理论知识(2)

11、如何处理WEB自动化测试中的跨域问题的? 。设置浏览器选项:在自动化测试中,可以通过设置浏览器选项来禁用跨域策略。这可以通过使用WebDriver的接口或设置浏览器选项的方法来实现。例如,对于Chrome浏览器,可以使用-disable-web-security参…

2024年全球网络安全预测报告

1.Gartner Gartners Top Strategic Predictions for 2024 and Beyond《Gartner顶级战略预测:2024年及未来》 https://www.gartner.com/en/articles/gartner-s-top-strategic-predictions-for-2024-and-beyond 2.IDC Top 10 Worldwide IT Industry 2024 Predict…

【Python可视化实战】钻石数据可视化

一、项目引言 1.背景和目标 钻石作为一种珍贵的宝石,其价格受到多种因素的影响。为了深入了解钻石价格的决定因素,我们收集了大量关于钻石的数据,并希望通过数据可视化来揭示钻石特征与价格之间的关系。 2.内容 收集钻石的各项特征数据&a…

2024 年初的大语言模型编程实践

首先我要明确,这篇文章并不旨在回顾大语言模型。显而易见,2023 年对人工智能来说是不平凡的一年,再去强调这一点似乎没有多大必要。这篇文章更多是作为一位程序员的个人体验分享。自从 ChatGPT 出现,再到使用本地运行的大语言模型…

【大数据】分布式协调系统 Zookeeper

分布式协调系统 Zookeeper 1.Zookeeper 的特点2.Zookeeper 的数据结构3.Zookeeper 的应用场景3.1 统一命名服务3.2 统一配置管理3.3 统一集群管理3.4 服务器动态上下线3.5 软负载均衡 Zookeeper 是 Apache 开源的一个顶级项目,目的是为分布式应用提供协调服务&#…

IO进程线程 day4

进程状态间的转化 创建出三个进程完成两个文件之间拷贝工作&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程回收子进程的资源 #include <head.h> int main(int argc, const char *argv[]) {FILE *fp1NULL,*fp2NULL;//定义两个文…

【Java基础篇】常见的字符编码、以及它们的区别

常见的字符编码、以及它们的区别 ✔️ 解析✔️扩展知识仓✔️Unicode和UTF-8有啥关系?✔️有了UTF-8&#xff0c;为什么要出现GBK✔️为什么会出现乱码 ✔️ 解析 就像电报只能发出 ”滴” 和 ”答” 声一样&#xff0c;计算机只认识 0 和 1 两种字符&#xff0c;但是&#x…

【驱动序列】C#获取电脑硬件基本组合以及基础信息

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读《小5讲堂之知识点实践序列》文章。 这是2024年第7篇文章&#xff0c;此篇文章是C#知识点实践序列文章&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 要开发一款驱动小助手&…

vue封装基础input组件(添加防抖功能)

先看一下效果&#xff1a; // 调用页面 <template><div><!-- v-model&#xff1a;伪双向绑定 --><my-input v-model"inputVal" label"姓名" type"textarea" /></div> </template><script> import…