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

目录

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接口

Go 复制代码
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

Go 复制代码
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数据

Go 复制代码
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
	}
}

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

Go 复制代码
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、路由组

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

使用

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

Go 复制代码
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,
		})
	})

验证

多线程

Go 复制代码
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)
	}
}
相关推荐
草海桐9 分钟前
golang 的github.com/dgrijalva/jwt-go包
golang·jwt·jwt-go
旧识君12 分钟前
移动端1px终极解决方案:Sass混合宏工程化实践
开发语言·前端·javascript·前端框架·less·sass·scss
郝YH是人间理想28 分钟前
OpenCV基础——傅里叶变换、角点检测
开发语言·图像处理·人工智能·python·opencv·计算机视觉
Tiger Z31 分钟前
R 语言科研绘图第 36 期 --- 饼状图-基础
开发语言·程序人生·r语言·贴图
揣晓丹41 分钟前
JAVA实战开源项目:校园失物招领系统(Vue+SpringBoot) 附源码
java·开发语言·vue.js·spring boot·开源
霍徵琅1 小时前
Groovy语言的物联网
开发语言·后端·golang
独好紫罗兰2 小时前
洛谷题单3-P1420 最长连号-python-流程图重构
开发语言·python·算法
kingmax542120082 小时前
深入解析:使用Python爬取Bilibili视频
开发语言·python·音视频
申雪菱2 小时前
Scheme语言的数据挖掘
开发语言·后端·golang
Aerkui2 小时前
Python列表(List)深度解析
开发语言·python