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

文章目录


一、安装gin包和热加载包

  1. 首先终端新建一个main.go
  2. 然后go mod init '项目名称'
  3. 执行以下命令 安装gin包
go 复制代码
go get -u github.com/gin-gonic/gin
  1. 终端安装热加载包
go 复制代码
go get github.com/pilu/fresh
  1. 终端输入fresh 运行 ,之后文件的改动,项目自动重新热加载
go 复制代码
fresh
  1. 简单示例代码
go 复制代码
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数据
go 复制代码
    /*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数据
go 复制代码
  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. 返回结构体
go 复制代码
	
 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返回
go 复制代码
   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
go 复制代码
  r.GET("/xml", func(c *gin.Context) {
		c.XML(http.StatusOK, gin.H{
			"code":  200,
			"title": "小米SU7",
		})

	})
  1. 返回模版 html
go 复制代码
   	/*向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>
go 复制代码
   
	/*向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}}
go 复制代码
	/*向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}}
go 复制代码
       /*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}}
相关推荐
天下无敌笨笨熊1 小时前
C#Modbus串口开发心得
开发语言·c#
电商API_180079052471 小时前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
zzzll11111 小时前
深度剖析:HashMap 并发死循环与 ConcurrentHashMap 两代演进全解
java·开发语言
如意猴1 小时前
【C++】001--C++入门(1)
开发语言·c++
传奇开心果编程1 小时前
【Rust入门知识点学与练】第10课:Option 和 Result(错误处理入门)
开发语言·学习·rust
leonkay2 小时前
C# 锁机制——【2】深入原理
开发语言·后端·spring·c#·个人开发
坐吃山猪2 小时前
【多线程】CompletableFuture使用
java·开发语言·多线程
CHPCWWHSU2 小时前
DeepSeek-Harness-Qt将浏览器端Agent装入桌面应用
开发语言·qt
前端 贾公子2 小时前
第10章:RAG(2)
开发语言·python
爱学堂IT分享3 小时前
图灵Java互联网架构师六期
java·开发语言