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语言的项目结构。


相关文章
|
19天前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
148 86
|
2月前
|
人工智能 测试技术 Go
Go 语言的主流框架
本文全面解析了 Go 语言主流技术生态,涵盖 Web 框架、微服务、数据库工具、测试与部署等多个领域。重点介绍了 Gin、Echo、Beego 等高性能框架,以及 gRPC-Go、Go-Micro 等微服务组件。同时分析了 GORM、Ent 等 ORM 工具与测试部署方案,并结合场景提供选型建议,助力开发者构建高效稳定的 Go 应用。
767 0
|
4月前
|
存储 Go
Go语言之接口与多态 -《Go语言实战指南》
Go 语言中的接口是实现多态的核心机制,通过一组方法签名定义行为。任何类型只要实现接口的所有方法即视为实现该接口,无需显式声明。本文从接口定义、使用、底层机制、组合、动态行为到工厂模式全面解析其特性与应用,帮助理解 Go 的面向接口编程思想及注意事项(如 `nil` 陷阱)。
151 22
|
11天前
|
安全 NoSQL Shell
web渗透-SSRF漏洞及discuz论坛网站测试
SSRF(服务器端请求伪造)是一种安全漏洞,攻击者可诱使服务端发起任意请求,进而探测或攻击内网系统。常用于端口扫描、访问内部服务、读取本地文件等。常见防御包括限制协议、域名和IP,但可通过302跳转、短地址等方式绕过。
77 1
web渗透-SSRF漏洞及discuz论坛网站测试
|
2月前
|
人工智能 负载均衡 监控
使用 Go 和 Gin 实现高可用负载均衡代理服务器
本文基于Go语言和Gin框架,实现了一个企业级负载均衡代理服务器,支持动态路由、健康检查、会话保持等功能。具备高可用性与高性能,单节点支持100k+ QPS,延迟达亚毫秒级,并提供完整的压力测试方案与优化建议。
|
3月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
3月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
3月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
4月前
|
存储 JSON Go
Go语言之空接口与类型断言
本文介绍了 Go 语言中空接口(`interface{}`)和类型断言的核心概念及其应用。空接口可存储任意类型数据,适用于通用函数、动态数据结构与 JSON 解析等场景;类型断言用于将接口变量还原为具体类型,推荐使用带 `ok` 的写法以避免程序崩溃。此外,文章通过示例讲解了 `type switch` 类型判断与 JSON 处理技巧,并总结了空接口的注意事项,强调滥用可能导致类型安全性降低。内容深入浅出,帮助开发者灵活运用这些特性。
111 15
|
4月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。