GoLang开发使用gin框架搭建web程序

news/2024/9/3 22:05:00 标签: golang, gin, 开发语言

目录

gin-left:40px;">

gin-left:40px;">1.SDK安装

gin-left:40px;">​2.编辑器下载

gin-left:40px;">3.编辑器准备

gin-left:40px;">4.使用

gin-left:80px;">4.1常见请求方式


1.SDK安装

保证装了Golang的sdk(官网下载windows.zip->解压,安装,配置bin的环境变量)

2.编辑器下载

Download GoLand: A Go IDE with extended support for JavaScript, TypeScript, and databases (jetbrains.com)

3.编辑器准备

新建mod和一个main.go,打开命令行,拉取gin,下载慢配置阿里云镜像

配置阿里云镜像dos:go env -w GOPROXY=https://goproxy.io
拉取gin框架的dos: go get -u github.com/gin-gonic/gin

配置settings

4.使用

下载完导入下载的包,编写简单的get接口

package main

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

func main() {
	// 创建一个服务
	ginServer := gin.Default()
	// 访问地址,处理我们的请求  Request  Response
	ginServer.GET("/hello", func(context *gin.Context) {
		// 给前端相应json数据
		context.JSON(200, gin.H{"msg": "hello,world"})
	})
	// 服务器端口
	err := ginServer.Run(":8082")
	if err != nil {
		return
	}
}

验证

4.1常见请求方式

Go支持resfulAPI  post get put delete...
下边测试一个post

package main

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

func main() {
	// 创建一个服务
	ginServer := gin.Default()
	ginServer.Use()
	//连接数据库的代码
	// 访问地址,处理我们的请求  Request  Response
	ginServer.GET("/hello", func(context *gin.Context) {
		// 给前端相应json数据
		context.JSON(200, gin.H{"msg": "hello,world"})
	})
	ginServer.POST("/user", func(context *gin.Context) {
		context.JSON(200, gin.H{"msg": "hello,post"})
	})

	// 服务器端口
	err := ginServer.Run(":8082")
	if err != nil {
		return
	}
}

前后端传递值:前端传递JSON数据

package main

import (
	"encoding/json"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	// 创建一个服务
	ginServer := gin.Default()
	ginServer.Use()
	
	//前端给后端传递json
	ginServer.POST("/json", func(context *gin.Context) {
		//request.body
        // 该方法返回的是一个切片[]byte,把切片包装成我们想要的对象
		b, _ := context.GetRawData()
        //go 语言的object可以用空接口来表示,可以接收一切事物
		var m map[string]interface{}
        // json解析 这里包装成map
		_ = json.Unmarshal(b, &m)
        // 返回前端json数据
		context.JSON(http.StatusOK, m)

	})

	// 服务器端口
	err := ginServer.Run(":8082")
	if err != nil {
		return
	}
}


前后端传值,前端提交表单

package main

import (
	"encoding/json"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	// 创建一个服务
	ginServer := gin.Default()
	ginServer.Use()
	
	//前端提交表单
	ginServer.POST("/user/add", func(context *gin.Context) {
		username := context.PostForm("username")
		password := context.PostForm("password")
		context.JSON(http.StatusOK, gin.H{
			"username": username,
			"password": password,
		})
	})

	// 服务器端口
	err := ginServer.Run(":8082")
	if err != nil {
		return
	}
}

验证

路由、404、路由组

//路由
	ginServer.GET("/test", func(context *gin.Context) {
		context.Redirect(http.StatusMovedPermanently, "http://www.baidu.com")
	})
	
	// 404
	ginServer.NoRoute(func(context *gin.Context) {
		context.HTML(http.StatusNotFound, "404.html", nil)
	})
	
	//路由组
	userGroup := ginServer.Group("/user")
	{
		userGroup.GET("add")
	}

	orderGroup := ginServer.Group("/order")
	{
		orderGroup.GET("/delect", func(context *gin.Context) {
			context.JSON(http.StatusOK,gin.H{
				"msg":"删除操作",
			})
		})
	}

中间件(拦截器)

//自定义Go中间件 拦截器
func handler() gin.HandlerFunc {
	return func(context *gin.Context) {
		// 通过自定义的中间件,设置的值,在后续处理只要调用了这个中间件的都可以拿到这里的参数
		context.Set("userSession","userid-1")
		
		// 判断
		//......
		
		context.Next() // 放过
		context.Abort() // 拦截
	}
}

使用
找一个方法,把拦截器名字作为参数放入

ginServer.GET("/user/info",myHandler(), func(context *gin.Context) {
		// 取出中间件中的值
		userSession := context.MustGet("userSession").(string)
		userid := context.Query("userid")
		username := context.Query("username")
		context.JSON(http.StatusOK, gin.H{
			"userid":   userid,
			"username": username,
			"userSession":userSession,
		})
	})

验证

多线程

package main

import (
	"fmt"
	"time"
)

func main() {
	// go的多线程-协程
	go printgogogo()
	for i := 0; i < 1000; i++ {
		fmt.Println("main", i)
	}
	time.Sleep(time.Second * 3)
}
func printgogogo() {
	for i := 1; i < 1000; i++ {
		fmt.Println("printgogogogo", i)
	}
}


http://www.niftyadmin.cn/n/5085515.html

相关文章

html和css基础练习

vscode快捷键 alt b 在浏览器中打开 alt shift b 在其他浏览器打开 ctrl / 注释 ctrl y 快捷键删除 参考文章 https://www.bilibili.com/video/BV1m84y1w7Tb 基础html标签 img&#xff1a;图像&#xff0c;title&#xff1a;头部文字&#xff0c;body&#xff1a;主…

R语言手动绘制NHANSE数据基线表并聊聊NHANSE数据制作亚组交互效应表的问题(P for interaction)

美国国家健康与营养调查&#xff08; NHANES, National Health and Nutrition Examination Survey&#xff09;是一项基于人群的横断面调查&#xff0c;旨在收集有关美国家庭人口健康和营养的信息。 地址为&#xff1a;https://wwwn.cdc.gov/nchs/nhanes/Default.aspx 在既往的…

重生奇迹mu获取武器装备的主要方法

现在很多游戏玩家都非常喜欢打斗游戏&#xff0c;特别是打斗游戏设计非常出色&#xff0c;特别是重生奇迹mu打斗游戏&#xff0c;其游戏能够让玩家感受到最真实的体验&#xff0c;所以这款游戏在现在依然非常受欢迎。 在重生奇迹mu打斗游戏中&#xff0c;装备武器是最重要的&a…

淘宝价格,淘宝商品优惠券数据接口,淘宝商品销量接口,淘宝商品详情数据接口,淘宝API接口

淘宝价格和商品优惠券数据接口是淘宝平台提供的官方数据接口&#xff0c;通过调用接口&#xff0c;可以获取到淘宝商品的价格信息和优惠券数据。 获取淘宝价格和商品优惠券数据接口的步骤如下&#xff1a; 输入淘宝网址登陆淘宝账号密码。点击获取key和secret。调用获取buyer…

国外友人实地考察,FLIR T530热像仪

说起flir&#xff0c;可能很多朋友有些陌生&#xff0c;但是对于行业的人士来说&#xff0c;应该不陌生。在usa的军事系统里&#xff0c;应用最多的就是flir的热成像仪。可能有人会有疑问&#xff1f;flir和fluke都有热成像仪&#xff0c;哪家性能更稳定&#xff0c;架构更好&a…

Blind Signature盲签名与fabric区块链结合的应用

盲签名的概念 首先由 David Chaum 于1982年提出&#xff0c;盲签名实现了签名者对发送者的消息进行签名&#xff0c;却不能知道签名者消息的具体内容。 相当于将文件放入信封&#xff0c;签名者在信封上对文件进行签名&#xff0c;而不知道具体的文件内容。 盲签名的实现方式…

latex如何对.pdf格式的图片实现裁剪

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 在使用draw.io进行绘图&#xff0c;导出的时候不知道为什么周围会有留白&#xff0c;比如下图&#xff1a; 在导入latex的时候&#xff0c;会因为两侧的留白导致整张图片缩小。 如果直接进行裁剪.pdf&a…

小谈设计模式(28)—解释器模式

小谈设计模式&#xff08;28&#xff09;—解释器模式 专栏介绍专栏地址专栏介绍 解释器模式角色分析抽象表达式&#xff08;Abstract Expression&#xff09;终结符表达式&#xff08;Terminal Expression&#xff09;非终结符表达式&#xff08;Non-terminal Expression&…