Go语学习笔记 - 环境安装、接口测试 | Web框架Gin(一)

简介: Go语学习笔记 - 环境安装、接口测试 | Web框架Gin(一)

学习笔记,写到哪是哪。


基础语法差不多了,需要开始实践到一下项目,先来web框架gin吧,做一个后端web服务。


在把项目搭建起来的过程中,我也要结合实际的工作经验,补充一些项目结构、开发组件上的理解。


项目地址:github地址


gin安装

先将gin安装一下,安装依赖go语言还是比较方便的。


在安装之前先配置一下goproxy。


命令如下:


go env -w GO111MODULE=on

go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/   //阿里代理

go env -w GOPROXY=https://goproxy.cn   //七牛云代理

安装一下gin,命令如下:


go get github.com/gin-gonic/gin

Get请求测试

实现一个web服务还是比较简单的,创建一个router,绑定路由规则即可。先测试几个Get请求。


样例代码如下:


package main
import (
  "github.com/gin-gonic/gin"
  "net/http"
)
func main() {
  router := gin.Default()
  router.GET("/", func(context *gin.Context) {
  context.String(http.StatusOK, "hello world")
  })
  router.GET("/test/:name", func(context *gin.Context) {
  name := context.Param("name")
  context.String(http.StatusOK, "check param %s", name)
  })
  router.GET("/test1", func(context *gin.Context) {
  name := context.DefaultQuery("name", "张三")
  gender := context.Query("gender")
  context.String(http.StatusOK, "他叫%s,性别:%s", name, gender)
  })
  router.Run(":8080")
}

执行结果


[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.

- using env:   export GIN_MODE=release

- using code:  gin.SetMode(gin.ReleaseMode)


[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)

[GIN-debug] GET    /test/:name               --> main.main.func2 (3 handlers)

[GIN-debug] GET    /test1                    --> main.main.func3 (3 handlers)

[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.

Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.

[GIN-debug] Listening and serving HTTP on :8080


[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend yo

u to set a value.

Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-

proxies for details.

[GIN-debug] Listening and serving HTTP on :8080


测试一下,这里我是用的接口测试工具为ApiPost

image.png


image.png


image.png



注意


1、在使用context.DefaultQuery方法的时候,可以提供一个默认值。


2、除了可以使用":"来获取路径参数外,可以使用"*",可以匹配更多规则。我个人感觉我不会这么用get请求参数。


Post请求测试

Post请求是在项目中使用的比较多的,而且不管是使用form获取参数还是body,都十分常见。


同时返回的数据也不可能使用一行字符串,实际项目中还是使用json格式居多。


所以下面我使用form参数和body参数实现了一下post测试接口。


完成代码如下


package main
import (
  "encoding/json"
  "fmt"
  "github.com/gin-gonic/gin"
  "io/ioutil"
  "net/http"
)
type Result struct {
  Name string `json:"name"`
  Age  int    `json:"age"`
}
//反序列化为结构体对象
func parseJson(a string) Result {
  fmt.Printf("原始字符串: %s\n", a)
  var c Result
  if err := json.Unmarshal([]byte(a), &c); err != nil {
  fmt.Println("Error =", err)
  return c
  }
  return c
}
func main() {
  router := gin.Default()
  router.GET("/", func(context *gin.Context) {
  context.String(http.StatusOK, "hello world")
  })
  router.GET("/test/:name", func(context *gin.Context) {
  name := context.Param("name")
  context.String(http.StatusOK, "check param %s", name)
  })
  router.GET("/test1", func(context *gin.Context) {
  name := context.DefaultQuery("name", "张三")
  gender := context.Query("gender")
  context.String(http.StatusOK, "他叫%s,性别:%s", name, gender)
  })
  router.POST("/testPost", func(context *gin.Context) {
  name := context.PostForm("name")
  nick := context.DefaultPostForm("nick", "leo")
  context.JSON(http.StatusOK, gin.H{
    "status": gin.H{
    "code":    http.StatusOK,
    "success": true,
    },
    "name": name,
    "nick": nick,
  })
  })
  router.POST("/testPost2", func(context *gin.Context) {
  data, _ := ioutil.ReadAll(context.Request.Body)
  fmt.Println(string(data))
  context.JSON(http.StatusOK, gin.H{
    "code": http.StatusOK,
    "data": parseJson(string(data)),
  })
  })
  router.Run(":8080")
}

测试一下testPost和testPost2接口


image.png


image.png


注意


1、使用context.DefaultPostForm方法可以提供一个默认值。


2、可以使用gin.H方法构造json结构返回。


3、将获得打参数反序列化为结构体,这部分的代码使用到之前讲json解析的笔记。


Go语学习笔记 - Json解析 | 从零开始Go语言_剑客阿良_ALiang的博客-CSDN博客_go语言json对象


小结

本篇笔记主要是对gin的简单使用,我希望把这个项目慢慢完善,比如项目结构优化(可以贴合mvc结构)、日志功能、配置文件、数据库操作、缓存操作、高并发设计等等。项目持续升级,从中慢慢熟悉go语言的项目结构。


相关文章
|
4月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
385 4
|
7月前
|
人工智能 测试技术 Go
Go 语言的主流框架
本文全面解析了 Go 语言主流技术生态,涵盖 Web 框架、微服务、数据库工具、测试与部署等多个领域。重点介绍了 Gin、Echo、Beego 等高性能框架,以及 gRPC-Go、Go-Micro 等微服务组件。同时分析了 GORM、Ent 等 ORM 工具与测试部署方案,并结合场景提供选型建议,助力开发者构建高效稳定的 Go 应用。
1976 0
|
5月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
352 86
|
4月前
|
JavaScript 前端开发 Java
【GoWails】Go做桌面应用开发?本篇文章带你上手Wails框架!一步步带你玩明白前后端双端的数据绑定!
wails是一个可以让你使用Go和Web技术编写桌面应用的项目 可以将它看作Go的快并且轻量级的Electron替代品。可以使用Go的功能,并结合现代化UI完成桌面应用程序的开发
918 4
|
4月前
|
开发框架 前端开发 Go
【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
449 1
|
7月前
|
人工智能 负载均衡 监控
使用 Go 和 Gin 实现高可用负载均衡代理服务器
本文基于Go语言和Gin框架,实现了一个企业级负载均衡代理服务器,支持动态路由、健康检查、会话保持等功能。具备高可用性与高性能,单节点支持100k+ QPS,延迟达亚毫秒级,并提供完整的压力测试方案与优化建议。
227 7
|
8月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
8月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
8月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
12月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
446 20