golang 安装gin包、创建路由基本总结

news2025/5/19 14:24:48

文章目录

  • 一、安装gin包和热加载包
  • 二、路由简单场景总结


一、安装gin包和热加载包

  1. 首先终端新建一个main.go
  2. 然后go mod init ‘项目名称’
  3. 执行以下命令 安装gin包
go get -u github.com/gin-gonic/gin
  1. 终端安装热加载包
go get github.com/pilu/fresh
  1. 终端输入fresh 运行 ,之后文件的改动,项目自动重新热加载
fresh
  1. 简单示例代码
package main

import (
	"github.com/gin-gonic/gin"
)
func main (){
	r := gin.Default() // 创建一个路由引擎
	// 配置路由
	r.GET("/", func(c *gin.Context) {
		c.String(200, "你好,gin")
	})
}

二、路由简单场景总结

  1. 返回string数据
    /*1.创建路由*/
	r := gin.Default() // 创建一个路由引擎
	// 配置路由
	r.GET("/", func(c *gin.Context) {
		c.String(200, "你好,gin")
	})
	
	// 返回string数据
	r.POST("/ping", func(c *gin.Context) {
		c.String(http.StatusOK, "你好,gin") //http.StatusOK 表示200的状态码
	})
  1. 返回json数据
  r.GET("/json", func(c *gin.Context) {
		//gin.H是 map[string]interface{} 的类型别名:用于快速创建键值对形式JSON
		c.JSON(http.StatusOK, gin.H{
			"code": 200,
			"data": gin.H{
				"name": "张三",
				"age":  18,
			},
		})
	})
  1. 返回结构体
	
 type Article struct {
	Title   string `json:"title"` //json序列化时的键名,Title在json中以小写展示
	Desc    string `json:"desc"`
	Content string `json:"content"`
  }


   r.GET("/json1", func(c *gin.Context) {
		a := &Article{Title: "标题", Desc: "描述", Content: "内容"} //使用指针是避免每次都要拷贝结构体,不使用指针也可以访问数据
		//gin.H是 map[string]interface{} 的类型别名:用于快速创建键值对形式JSON
		c.JSON(http.StatusOK, gin.H{
			"code": 200,
			"data": a,
		})

	})
  1. jsonp返回
   type Article struct {
	Title   string `json:"title"` //json序列化时的键名,Title在json中以小写展示
	Desc    string `json:"desc"`
	Content string `json:"content"`
    }
  
  
   	// http://localhost:8080/jsonp?callback=xxx
	//返回 xxx({"code":200,"data":{"title":"标题-jsonp","desc":"描述","content":"内容"}});
	r.GET("/jsonp", func(c *gin.Context) {
		a := &Article{Title: "标题-jsonp", Desc: "描述", Content: "内容"}
		//gin.H是 map[string]interface{} 的类型别名:用于快速创建键值对形式JSON
		c.JSONP(http.StatusOK, gin.H{
			"code": 200,
			"data": a,
		})
	})
  1. 返回XML
  r.GET("/xml", func(c *gin.Context) {
		c.XML(http.StatusOK, gin.H{
			"code":  200,
			"title": "小米SU7",
		})

	})
  1. 返回模版 html
   	/*向html中传入普通数据*/
   r.GET("/html", func(c *gin.Context) {
		 c.HTML(http.StatusOK, "goods.html", gin.H{ 
		   "code": 200,
		   "title": `小米SU7`,
		 })
		 
		/*html中使用 .title接收*/
	  <h1 class="text-center my-4">{{.title}}</h1>
   
	/*向html中传入传入结构体*/
	r.GET("/html", func(c *gin.Context) {
		b := &Article{Title: "小米SU7年轻人的第一辆车", Desc: "描述", Content: "内容"} 
		c.HTML(http.StatusOK, "goods.html", gin.H{
			"code":  "200",
			"data":  b,
		})
	})


	/* 结构体赋值变量  $t */
	 {{$t := .data.Title}}
      <h3>{{$t}}</h3>
      
	/* 解构结构体  with */
	 {{with .data}}
      <p>{{.Title}}</p>
      {{end}}
	/*向html中传入变量,模版条件判断*/
	r.GET("/html", func(c *gin.Context) {
		c.HTML(http.StatusOK, "goods.html", gin.H{
			"code":  "200",
			"price": 50,
		})
	})

	 <!-- 条件判断 eq 相等 / ne 不相等 /  gt 大于 / lt 小于 / ge 大于等于 / le 小于等于 -->
      {{if ge .price 80}}
       <p>有点贵:{{.price}}</p>
       {{else if lt .price 10}}
       <p>有点便宜:{{.price}}</p>
       {{else}}
       <p>价格:{{.price}}</p>
       {{end}}
       /*html中传入切片,模版循环遍历数据*/
		r.GET("/html", func(c *gin.Context) {
		c.HTML(http.StatusOK, "goods.html", gin.H{
			"code":  "200",
			"hobby": []string{"小米", "SU7", "YU7"},
		  })
	   })


	 <!-- 循环遍历数据 -->
     {{range $key,$value := .hobby}}
      <li>{{$key}}---{{$value}}</li>
       {{else}}
      <p>没有数据</p>
      {{end}}

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

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

相关文章

BMVC2023 | 多样化高层特征以提升对抗迁移性

Diversifying the High-level Features for better Adversarial Transferability 摘要-Abstract引言-Introduction相关工作-Related Work方法-Methodology实验-Experiments结论-Conclusion 论文链接 GitHub链接 本文 “Diversifying the High-level Features for better Adve…

有哪些GIF图片转换的开源工具

以下是关于GIF图片转换的开源工具的详细总结,涵盖功能特点、适用场景及用户评价: 1. FFmpeg 功能特点: 作为开源命令行工具,FFmpeg支持视频转GIF、调整帧率、分辨率、截取片段等操作,可通过脚本批量处理。适用场景: 适合开发者或技术用户进行高效批处理,常用于服务器端自…

C++—特殊类设计设计模式

目录 C—特殊类设计&设计模式1.设计模式2.特殊类设计2.1设计一个无法被拷贝的类2.2设计一个只能在堆上创建对象的类2.3设计一个只能在栈上创建对象的类2.4设计一个类&#xff0c;无法被继承2.5设计一个类。这个类只能创建一个对象【单例模式】2.5.1懒汉模式实现2.5.2饿汉模…

Android 手写签名功能详解:从原理到实践

Android 手写签名功能详解 1. 引言2. 手写签名核心实现&#xff1a;SignatureView 类3. 交互层实现&#xff1a;MainActivity 类4. 布局与配置5. 性能优化与扩展方向 1. 引言 在电子政务、金融服务等移动应用场景中&#xff0c;手写签名功能已成为提升用户体验与业务合规性的关…

Level2.8蛇与海龟(游戏)

#小龟快跑游戏 输入难度(1-5),蛇追到龟&#xff0c;游戏结束 #分析问题&#xff1a;从局部>整体 #游戏画面&#xff1a;创建画笔(海龟蛇)>1.海龟移动(键盘控制)>2.蛇(自动追踪&#xff0c;海龟位置)>3.海龟(限定范围&#xff0c;防止跑出画布之外)>4.游戏&…

【Android构建系统】如何在Camera Hal的Android.bp中选择性引用某个模块

背景描述 本篇文章是一个Android.bp中选择性引用某个模块的实例。 如果是Android.mk编译时期&#xff0c;在编译阶段通过某个条件判断是不是引用某个模块A, 是比较好实现的。Android15使用Android.bp构建后&#xff0c;要想在Android.bp中通过自定义的一个变量或者条件实现选…

【Canvas与诗词】醉里挑灯看剑 梦回吹角连营

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>醉里挑灯看剑梦回吹角连营 Draft1</title><style type"…

实现视频分片上传 OSS

访问 OSS 有两种方式&#xff0c;本文用到的是使用临时访问凭证上传到 OSS&#xff0c;不同语言版本的代码参考&#xff1a; 使用STS临时访问凭证访问OSS_对象存储(OSS)-阿里云帮助中心 1.安装并使用 首先我们要安装 OSS&#xff1a; npm install ali-oss --save 接着我们…

网络I/O学习(一)

一、什么是网络IO&#xff1f; 就是客户端和服务端之间的进行通信的通道(fd)。 二、网络IO通信步骤 1、建立套接字 int socketfd socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in servaddr; servaddr.sin_family AF_INET; servaddr.sin_addr.s_addr htonl(INADDR_A…

Selenium-Java版(css表达式)

css表达式 前言 根据 tag名、id、class 选择元素 tag名 #id .class 选择子元素和后代元素 定义 语法 根据属性选择 验证CSS Selector 组选择 按次序选择子节点 父元素的第n个子节点 父元素的倒数第n个子节点 父元素的第几个某类型的子节点 父元素的…

产品更新丨谷云科技 iPaaS 集成平台 V7.5 版本发布

五月&#xff0c;谷云科技 iPaaS 集成平台保持月度更新&#xff0c; V7.5 版本于近日正式发布。我们一起来看看新版本有哪些升级和优化。 核心新增功能&#xff1a;深化API治理&#xff0c;释放连接价值 API网关&#xff1a;全链路可控&#xff0c;精准管控业务状态 业务状态…

深度学习让鱼与熊掌兼得

通常,一个大的复杂的模型的loss会低,但是拟合方面不够,小的模型在拟合方面更好,但是loss高,我们可以通过深度学习来得到一个有着低loss的小模型 我们之前学过,peacewise linear可以用常数加上一堆这个阶梯型函数得到,然后因为peacewise linear可以逼近任何function,所以理论上…

TDuckX 2.6 正式发布|API 能力开放,核心表单逻辑重构,多项实用功能上线。

大家好&#xff0c;TDuckX 2.6 已正式发布。 本次更新以可集成性提升、数据处理能力增强和交互体验优化为核心&#xff0c;新增了包括 新增OpenAPI 模块、表单数据批量修改、字段导出分列 等多个面向开发者和实际业务落地场景的功能。 我们也重构了部分底层逻辑模块&#xff…

JAVA EE(进阶)_进阶的开端

别放弃浸透泪水的昨天&#xff0c;晨光已为明天掀开新篇 ——陳長生. ❀主页&#xff1a;陳長生.-CSDN博客❀ &#x1f4d5;上一篇&#xff1a;JAVA EE_HTTP-CSDN博客 1.什么是Java EE Java EE&#xff08;Java Pla…

ArcGIS Pro调用多期历史影像

一、访问World Imagery Wayback&#xff0c;基本在我国范围 如下图&#xff1a; 二、 放大到您感兴趣的区域 三、 查看影像版本信息 点击第二步的按钮后&#xff0c;便可跳转至World Imagery (Wayback 2025-04-24)的相关信息。 四 、点击上图影像版本信息&#xff0c;页面跳转…

组态王|组态王中如何添加西门子1200设备

哈喽,你好啊,我是雷工! 最近使用组态王采集设备数据,设备的控制器为西门子的1214CPU, 这里边实施边记录,以下为在组态王中添加西门子1200PLC的笔记。 1、新建 在组态王工程浏览器中选择【设备】→点击【新建】。 2、选择设备 和设备建立通讯要通过对应的设备驱动。 在…

6.2.2邻接表法-图的存储

知识总览&#xff1a; 为什么要用邻接表 因为邻接矩阵的空间复杂度高(O(n))&#xff0c;且不适合边少的稀疏图&#xff0c;所以有了邻接表 用代码表示顶点、图 声明顶点图信息 声明顶点用一维数组存储各个顶点的信息&#xff0c;一维数组字段包括2个&#xff0c;每个顶点的…

C++23 放宽范围适配器以允许仅移动类型(P2494R2)

文章目录 引言背景与动机提案内容与实现细节提案 P2494R2实现细节编译器支持 对开发者的影响提高灵活性简化代码向后兼容性 示例代码总结 引言 C23 标准中引入了许多重要的改进&#xff0c;其中一项值得关注的特性是放宽范围适配器&#xff08;range adaptors&#xff09;以允…

【技海登峰】Kafka漫谈系列(十一)SpringBoot整合Kafka之消费者Consumer

【技海登峰】Kafka漫谈系列(十一)SpringBoot整合Kafka之消费者Consumer spring-kafka官方文档: https://docs.spring.io/spring-kafka/docs/2.8.10/reference/pdf/spring-kafka-reference.pdf KafkaTemplate API: https://docs.spring.io/spring-kafka/api/org/springframe…

WebRTC技术下的EasyRTC音视频实时通话SDK,助力车载通信打造安全高效的智能出行体验

一、方案背景​ 随着智能交通与车联网技术的飞速发展&#xff0c;车载通信在提升行车安全、优化驾驶体验以及实现智能交通管理等方面发挥着越来越重要的作用。传统的车载通信方式在实时性、稳定性以及多媒体交互能力上存在一定局限&#xff0c;难以满足现代车载场景日益复杂的…