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


相关文章
|
5天前
|
监控 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
54 20
|
11天前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
20 0
|
2月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
148 31
Selenium IDE:Web自动化测试的得力助手
|
2月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE是开源的Web自动化测试工具,适用于Chrome、Firefox等多款浏览器。它提供简单的录制与回放功能,用户可通过录制浏览器操作自动生成测试脚本,支持导出为多种编程语言,便于非专业测试人员快速上手,有效提升测试效率与质量。
411 6
Selenium IDE:Web自动化测试的得力助手
|
2月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
266 17
Selenium:强大的 Web 自动化测试工具
|
2月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
2月前
|
开发框架 Go 计算机视觉
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。
|
3月前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
235 4
|
3月前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
225 1
|
3月前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
118 61

热门文章

最新文章