Go语言学习(八)-- Gin入门

2023-11-01

Gin 是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快。
Gin 最擅长的就是 Api 接口的高并发,如果项目的规模不大,业务相对简单,这个时候我们
也推荐您使用 Gin
当某个接口的性能遭到较大挑战的时候,这个还是可以考虑使用 Gin 重写接口。
Gin 也是一个流行的 golang Web 框架, Github Strat 量已经超过了 50k
Gin 的官网: https://gin-gonic.com/zh-cn/
Gin Github 地址: https://github.com/gin-gonic/gin

 一、Gin环境的搭建

1.下载并安装gin

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

在安装之前如果你是用的是go mod来管理项目的话就需要我们自己选择在我们需要的目录下面执行go mod init xxxx(最好是和你的项目名称一致)。这样就会在当前目录下产生一个go.mod文件。然后再进行gin的下载安装这样就能在当前目录来使用我们的gin'框架了。

2.gin 引入到代码中:

import "github.com/gin-gonic/gin"
3. (可选)如果使用诸如 http.StatusOK 之类的常量,则需要引入 net/http 包:
import "net/http"
当然在我们日常使用当中这些包都是 自动导入的,当我们在需要这些包的时候我们的编辑器就会自动帮我们进行导入,所以这些问题并不需要我们去担心,而关键在于要讲这些需要用到的外部包 down下来
4 、新建 Main.go 配置路由
package main

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

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

	r.GET("/", func(context *gin.Context) {
		context.String(200, "值:%v", "Hello gin!!!")
	})

	r.Run() //启动一个web服务 默认8080端口号 也可以自己传入制定端口号
}
5 、运行你的项目
go run main.go
6 、要改变默认启动的端口
r.Run(":9000")

 二、golang程序的热加载

所谓热加载就是当我们对代码进行修改时,程序能够 自动重新加载并执行 ,这在我们开发中
是非常便利的,可以快速进行代码测试,省去了每次手动重新编译
beego 中我们可以使用官方给我们提供的 bee 工具来热加载项目,但是 gin 中并没有官方提
供的热加载工具,这个时候我们要实现热加载就可以 借助第三方的工具
这里我使用的第三方工具就是fresh
github地址:https://github.com/gravityblast/fresh
Fresh是一个命令行工具,每次保存Go或模版文件时,该工具都会生成或重新启动Web应用程序。Fresh将监视文件事件,并且每次创建/修改/删除文件时,Fresh都会生成并重新启动应用程序。如果go build返回错误,它会将记录在tmp文件夹中。

安装

go get github.com/pilu/fresh

使用

# 进入你的项目目录
$ cd /your_project
# 启动
$ fresh

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go语言学习(八)-- Gin入门 的相关文章

  • 无法在 Golang 中导入本地模块

    我正在尝试导入本地模块 但无法使用以下命令导入它go mod 我最初使用以下方式构建了我的项目go mod init github com AP Ch2 GOMS 注意我的环境是go1 14我使用 VSCode 作为我的编辑器 这是我的文件
  • go build 不断抱怨:go.mod 有 post-v0 模块路径

    Go 1 11 发布后 我一直在尝试将我的存储库移动到 Go 模块 方法是添加go mod文件在其根目录下 我的根库之一my host root其版本为17 0 1 所以我在其中写道go mod file module my host ro
  • 将 Websocket 消息发送到 Go 中的特定通道(使用 Gorilla)

    我对 Go 很陌生 并且发现自己使用套接字作为我的第一个项目 这是一个多余的问题 但我无法理解如何将 websocket 更新发送到 Go 中的特定通道 使用 Gorilla 我在用此链接中的代码示例 https github com go
  • Golang:使用像 Node.js 中那样的可读流从 PostgreSQL 数据库中选择几百万行

    我有大约 5000 万行的 PostgreSQL 表 我想编写 Go 代码来从该表中选择大约 100 万行 并以有效的方式处理它们 上次我使用了nodejs和这个NPM模块pg 查询流 https www npmjs com package
  • 在 Go 中解析 RFC-3339 / ISO-8601 日期时间字符串

    我尝试解析日期字符串 2014 09 12T11 45 26 371Z 在围棋中 该时间格式定义为 RFC 3339 日期时间 https datatracker ietf org doc html rfc3339 section 5 6
  • K8s更改配置映射并更新应用程序日志级别

    我想更改在 K8S 上运行的 Golang 应用程序的登录配置 我在本地尝试了以下代码 它按预期工作 我正在使用 viper 来监视配置文件更改 这是带有日志配置的配置图 apiVersion v1 kind ConfigMap data
  • 如何获取文件的 ctime、atime、mtime 并更改它们

    如何使用 Go 获取文件的 ctime mtime atime 并更改它们 在 Go 1 1 2 中 os Stat只能获取mtime os Chtimes 可以更改 mtime 和 atime 但不能更改 ctime Linux ctim
  • 从 Go Slice 中选择一个随机值

    情况 我有一些值 需要从中随机选择一个值 然后我想将它与固定字符串连接起来 到目前为止 这是我的代码 func main create the reasons slice and append reasons to it reasons m
  • runtime.LockOSThread 是否允许子 goroutine 在同一个操作系统线程中运行?

    我明白在 Go 中 runtime LockOSThread https golang org pkg runtime LockOSThread将一个 goroutine 绑定到一个操作系统线程 并且不允许其他 goroutine 在该线程
  • GoLang - 坚持使用 ISO-8859-1 字符集

    我正在开发一个项目 我们需要将信息保存在具有 ISO 8859 1 表的旧数据库中 因此 在向数据库写入内容之前 我需要将其从 UTF 8 转换为 ISO 8859 1 每次从数据库检索它时 我都需要将其转换回 UTF 8 我试图使用图书馆
  • go 中的属性更改通知

    如何在 go 中向多个接收器发出 属性 更改信号 类似于在 Qt 中使用通知信号定义属性的方式 例如 如果您想象有一些值需要以多种方式显示 例如进度值可以同时显示为进度条和文本 当基础值发生变化时 两者都需要更新 一种方法可能是利用chan
  • 无法理解 5.6.1。注意事项:捕获迭代变量

    我正在学习 Go 但无法理解 var rmdirs func for dir range tempDirs os MkdirAll dir 0755 rmdirs append rmdirs func os RemoveAll dir NO
  • Golang Appengine 项目无法构建

    我有一个使用 golang 的应用程序引擎项目 我已经大约一年没有碰过了 我现在无法让它在之前构建的机器上构建 我收到以下错误 go app builder 解析输入失败 解析器 src golang org x net internal
  • 无法连接到代理“证书由未知机构签名”

    我正在尝试通过 Kubernetes 部署上的 cloudsql proxy 容器连接到 CloudSQL 实例 我已安装 cloudsql 凭据以及值GOOGLE APPLICATION CREDENTIALS set 但是 我的日志中仍
  • 视频第一帧

    我正在创建一个单页应用程序 后端使用 Golang 前端使用 javascript 我想找到一种使用 Golang 获取视频第一帧的方法 首先 我将 mp4 视频文件上传到服务器 它保存在服务器上 有没有办法使用 Golang 获取该视频的
  • 在函数中将通道作为参数传递的不同方法

    我正在阅读一些Go代码 并说了几种传递Go通道的不同方法 也许它们是相同的 但我想知道是否有任何区别 因为我无法在线找到文档 1 func serve ch lt chan interface do stuff 2 func serve c
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • 使用 testify 模拟接口方法两次,输入和输出不同

    如何在 golang 测试中模拟接口方法两次 例如 type myCache interface Get key string data interface error type service struct cache myCache f
  • 在处理程序之后访问 HTTP 请求上下文

    在我的日志记录中间件 链中的第一个 中 我需要访问一些在链下游的某些身份验证中间件中编写的上下文 并且仅在处理程序本身执行之后 旁注 需要首先调用日志记录中间件 因为我需要记录请求的持续时间 包括在中间件中花费的时间 此外 当权限不足时 身
  • 重新插入通道导致死锁

    我有稳定的入站 作业 流 将其输入到无缓冲通道中 我有一个for range循环来迭代项目并处理它们 如果处理该项目失败 我会将项目重新插入通道中 以便稍后重试 问题是当我将项目重新插入通道时 它陷入僵局 我明白为什么会发生这种情况 处理器

随机推荐

  • 国产WMS仓库管理系统排名

    导读 WMS仓库管理系统是通过入库业务 出库业务 仓库调拨 库存调拨和虚仓管理等功能 对批次管理 物料对应 库存盘点 质检管理 虚仓管理和即时库存管理等功能综合运用的管理系统 可以有效控制并跟踪仓库业务的物流及成本管理的全过程 实现或完善企
  • 学习笔记 JavaScript ES6 Webpack核心概念

    学习内容 入口 entry 出口 output Loader 插件 plugin 模式 mode ES6 新特性的语法是无法被浏览器所识别的 浏览器只能识别ES5的语法 所以ES6 需要使用一个工具 把语法转化为ES5的语法 这个工具就是B
  • MyBatis3框架详解(四)

    一 select元素 select标签元素是用来定义查询操作的 id属性 唯一标识符 用来引用这条语句 需要和接口的方法名一致 parameterType属性 参数类型 可以不传 mybatis会根据TypeHandler自动推断 resu
  • 计算机网络3—网络层

    IP报文的格式和各个字段的含义 掌握IP分片 如何避免IP分片 在应用层做限制 在传输层做限制 如何确定分片顺序 接收端如何确定所有分片都到了 IP线路 路由表 路由表每个字段的含义 ICMP协议 查询 报错 ICMP协议的层次和作用 IC
  • java异常NoClassDefFoundError

    这个问题错误原因众多 如下是我在解析数据时遇到的问题并附上解决方法 遇到这样的问题 java lang ClassNotFoundException serialization Serializer 提示没有找到定义的Class 查看各个文
  • win下安装nextcloud_在 Windows 平台下搭建docker - nextCloud 个人云盘

    一直感觉放在百度网盘里面的数据很不安全 因为之前因为存一些技术教程被封过号 再也没活过来 正巧赶上盘当劳事件 手里还有闲置硬件资源 终于下定决心自己搭建一个 NAS 来用了 先挂载到本地磁盘中 因为我们不想因为存储的数据随着容器的删除而消失
  • 机器学习之数据准备

    1 数据预处理的理由 在开始训练机器学习的模型之前 需要对数据进行预处理 这是一个必须的过程 不同算法对数据有不同的假设 需要按照不同的方式转换数据 这样做的目的是为了提高模型的准确度 2 数据转换的方法 调整数据尺度 正态化数据 二值数据
  • oracle libcpt ora,Oracle12c R2注意事项: Active DataGuard logon fail with ORA-00604& ORA-04024

    这是一套12c R2 4 nodes Oracle RAC on RHEL 7的环境 已安装0417 RU 该库有一套Phyical DataGard 同时也是GoldenGate的target端 存在一个replicat 进程同步数据 一
  • C++类模板

    类模板和函数模板语法相似 在声明模板template后面加类 此类称为类模板 类模板作用 建立一个通用类 类中的成员 数据类型可以不具体制定 用一个虚拟的类型来代表 语法 template
  • scanner hasnext方法的结束输入

    先看一段经典的程序 import java util Scanner public class aplusb public static void main String args Scanner in new Scanner System
  • ubuntu 18.04 中 编译 FasterTransformer,与缺少安装包

    前提 A100 cuda 11 6 cudnn8 nccl zlib1g dev git clone recursive https github com NVIDIA FasterTransformer git git submodule
  • 【转】svn详解

    转自 svn status详解 世界 太精彩 博客园 svn 是在提交前查看本地文本和版本库里面的文件的区别 返回值有许多种具体含义如下 L abc c svn已经在 svn目录锁定了abc c M bar c bar c的内容已经在本地修
  • python+pyqt5设置窗体图标和任务栏图标及窗体标题的方法

    本次设置窗体标题只用了一种方法 在进行窗体实例化后window Window 使用setWindowTitle str 命令 在主程序中的设置命令如下所示 if name main QApplication setAttribute Qt
  • lab4

    这一个lab主要学习进程管理和进程通讯 come on 好好学习 PART A 多处理器支持 Exercise 1 void mmio map region physaddr t pa size t size Where to start
  • 18虚幻4【UE4】 中场景中的N个actor赋予随机颜色

    问题 现在1000个静态网格体要附上随机颜色的材质 难道我们要写1000中材质 然后附上去吗 一 思路 获取场景中物体 创建材质实例 修改材质参数 通过get actors with tag也好 通过get actors of class也
  • 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序

    51单片机 IIC OLED屏幕驱动 Proteus仿真 实物验证示例程序 Proteus仿真效果 注意点击运行仿真后 图像刷新出来比较慢 示例主程序 include REG51 h include oled h include bmp h
  • QT获取mysql数据库驱动步骤记录-版本QT_5.12.5-附精华链接

    首先先检查自己的QT已经加载的数据库版本 qDebug lt
  • ARM架构的外部中断介绍(S5PV210芯片)

    1 外部中断介绍 1 中断源的划分 内部中断和外部中断 所谓内部中断和外部中断 是根据中断源来自Soc内部还是外部 1 比如串口 定时器等都是Soc内部自带的 所以触发的中断都是内部中断 2 给Soc外接一个烟雾报警器 通过GPIO引脚和S
  • 关于移动端H5使用xhr上传文件

    首先我是用的是uniapp框架 所以以下内容皆以此未前提 我是第一次用uniapp 所以有些地方也不太熟悉 比如在写h5时 页面上的input的type写成file时页面上没有效果 查看官方文档后知道 需要使用js 插入一个input标签
  • Go语言学习(八)-- Gin入门

    Gin 是一个 Go Golang 编写的轻量级 http web 框架 运行速度非常快 Gin 最擅长的就是 Api 接口的高并发 如果项目的规模不大 业务相对简单 这个时候我们 也推荐您使用 Gin 当某个接口的性能遭到较大挑战的时候