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

news2025/6/20 4:49:54

目录

1.SDK安装

​2.编辑器下载

3.编辑器准备

4.使用

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.coloradmin.cn/o/1086837.html

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

相关文章

postman 密码rsa加密登录-1获取公钥

fiddler抓包看到&#xff1a;请求系统地址会自动跳转到sso接口&#xff0c;查看200状态的接口返回的html里存在一个encrypt的信息&#xff0c;咨询开发这个就是返回的公钥。 在postman的tests里对该返回进行处理&#xff0c;获取公钥并设为环境变量 //获取公钥 var pubKey re…

Rancher 使用指南

Rancher 使用指南 Rancher 是什么?Rancher 与 OpenShift / Kubesphere 主要区别对比RancherOpenShiftKubesphere 对比 Rancher 和 OpenShift Rancher 安装 Rancher 是什么? 企业级Kubernetes管理平台 Rancher 是供采用容器的团队使用的完整软件堆栈。它解决了管理多个Kuber…

RT-Thread 内核移植(学习)

内核移植 内核移植就是指将RT-Thread内核在不同的芯片架构、不同的板卡上运行起来&#xff0c;能够具备线程管理和调度&#xff0c;内存管理&#xff0c;线程间同步和通信、定时器管理等功能。 移植可分为CPU架构移植和BSP&#xff08;Board support package&#xff0c;板级…

催交费通知单套打单纸设置说明

2.0系统打印催交费通知单设置尺寸操作展示如下,仅供参考。具体如下: 一、Win7系统 1.找到设备和打印机,选中对应打印机后点击上方打印服务器属性; 2.创建一个宽14cm,高14cm的表单; 二、win10系统 1.找到打印机,点管理,选择打印首选项;

Unity关键词语音识别

一、背景 最近使用unity开发语音交互内容的时候&#xff0c;遇到了这样的需求&#xff0c;就是需要使用语音关键字来唤醒应用程序&#xff0c;然后再和程序做交互&#xff0c;有点像智能音箱的意思。具体的技术方案方面&#xff0c;也找了一些第三方的服务&#xff0c;比如百度…

当涉及到API接口数据分析时,主要可以从以下几个方面展开

当涉及到API接口数据分析时&#xff0c;主要可以从以下几个方面展开&#xff1a; 请求分析&#xff1a;可以统计每个API接口的请求次数、请求成功率、失败率等基础指标。这些指标可以帮助你了解API接口的使用情况&#xff0c;比如哪个API接口被调用的次数最多&#xff0c;哪个…

2023年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 Python编程&#xff08;1~6级&#xff09;全部真题・点这里 第1题&#xff1a;酒鬼 Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅。今天&#xff0c;他来到这个大客厅欣赏他的奖品。房东摆出了一行瓶子在酒吧上…

《向量数据库指南》——向量数据库与 ANN 算法库的区别

向量数据库与 ANN 算法库的区别 我们经常听到一个这样的错误观念——向量数据库只是在 ANN(approximate nearest neighbor,近似最近邻)算法上封装了一层。但这种说法大错特错。 向量数据库可以处理大规模数据,而 ANN 算法库只能处理小型的数据集 从本质上来看,以 Milvus 为…

Adobe Premiere Pro 和 After Effects 安装出错的解决路径

在有点年头的电脑上安装Premiere Pro 和 After Effects 遇到了前所未有的的麻烦&#xff0c;请了某宝上的小哥进行远程安装&#xff0c;两个软件倒是可以用了&#xff0c;但Win11系统无法正常关机&#xff0c;用了几天系统除了关机时会蓝屏几十秒&#xff0c;其他没有发现毛病&…

centos 7 lamp owncloud

OwnCloud是一款开源的云存储软件&#xff0c;基于PHP的自建网盘。基本上是私人使用&#xff0c;没有用户注册功能&#xff0c;但是有用户添加功能&#xff0c;你可以无限制地添加用户&#xff0c;OwnCloud支持多个平台&#xff08;windows&#xff0c;MAC&#xff0c;Android&a…

计算机网络 | 物理层

计算机网络 | 物理层 计算机网络 | 物理层基本概念数据通信基本知识&#xff08;一&#xff09;一个数据通信流程的例子数据通信相关术语三种通信方式数据传输方式串行传输和并行传输同步传输和异步传输 小结 数据通信基本知识&#xff08;二&#xff09;码元&#xff08;Symbo…

【Java 进阶篇】JavaScript 一元运算符详解

在JavaScript中&#xff0c;一元运算符是一类操作符&#xff0c;它们作用于单一操作数&#xff08;一个值&#xff09;。这些运算符执行各种操作&#xff0c;包括递增、递减、类型转换等。本文将详细介绍JavaScript中的一元运算符&#xff0c;解释它们的用途&#xff0c;提供示…

MySQL MVCC详细介绍

MVCC概念 MVCC(Multi-Version Concurrency Control) 多版本并发控制&#xff0c;是一种并发控制机制,用于处理数据库中的并发读写操作&#xff0c;它通过在每个事务中创建数据的快照&#xff0c;实现了读写操作的隔离性&#xff0c;从而避免了读写冲突和数据不一致的问题。 M…

VUE echarts 柱状图、折线图 双Y轴 显示

weekData: [“1周”,“2周”,“3周”,“4周”,“5周”,“6周”,“7周”,“8周”,“9周”,“10周”], //柱状图横轴 jdslData: [150, 220, 430, 360, 450, 680, 100, 450, 680, 200], // 折线图的数据 cyslData: [100, 200, 400, 300, 500, 500, 500, 450, 480, 400], // 柱状图…

基于VScode 使用plantUML 插件设计状态机

本文主要记录本人初次在VScode上使用PlantUML设计 本文只讲述操作的实际方法&#xff0c;假设java已安装成功 。 1. 在VScode下安装如下插件 2. 验证环境是否正常 新建一个文件夹并在目录下面新建文件test.plantuml 其内容如下所示: startuml hello world skinparam Style …

ubuntu|23 安装Gnome主题

ubuntu23 安装主题 进入网站选择需要的主题 https://www.opendesktop.org/s/Gnome/p/1357889 1 资源下载 经常加载不出来&#xff0c; 这里直接进入github下载源码 下载zip 2 安装主题 根据文档提示&#xff0c; 执行install.sh就能安装 3 切换主题 安装 tweak工具 sudo …

Win10玩游戏老是弹回桌面的解决方法

在Win10电脑中&#xff0c;用户不仅可以办公&#xff0c;也可以畅玩各种各样的游戏。但是&#xff0c;有时候用户在玩游戏的时候&#xff0c;遇到了游戏老是自己弹回桌面的问题&#xff0c;这样是非常影响游戏体验的&#xff0c;却不清楚具体的解决方法。下面小编给大家带来了简…

力扣第235题 二又搜索树的最近公共祖先 c++

题目 235. 二叉搜索树的最近公共祖先 中等 &#xff08;简单&#xff09; 相关标签 树 深度优先搜索 二叉搜索树 二叉树 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&…

抖音短视频SEO是什么?抖音SEO系统源码/SEO系统源码搭建/

一.数据市场 二、AI视频创意 (1)工作台 (2)创造性工程 (3)材料管理 (4)裂变视频 (5)创作灵感 场景:实现单体设计模式&#xff1b; 想法:与创建相关的是construct的陷阱&#xff0c;每次我们都返回相同的实例。 (1)推广词库(2)三维排名查询(3)算术指数四。帐户矩阵操作(1)账户管…

谷歌浏览器 ERR_MANDATORY_PROXY_CONFIGURATION_FAILED 报错的处理方式

今天早上到公司 还是和往常一样 电脑开机 打开谷歌浏览器 搜索资料结果给我报错了 2.原先我的谷歌浏览器配置的搜索引擎为百度 3.电脑上面的火狐 ie浏览器都是可以的排除电脑网络方面的问题(dns也有解析谷歌路径的这个有兴趣的可以研究) 最终还是刷新了电脑的dns ,清除了谷歌…