首页 > 其他分享 >《使用Gin框架构建分布式应用》阅读笔记:p272-p306

《使用Gin框架构建分布式应用》阅读笔记:p272-p306

时间:2024-10-31 18:20:12浏览次数:1  
标签:http p272 err res 分布式应用 test gin go Gin

《用Gin框架构建分布式应用》学习第15天,p272-p306总结,总35页。

一、技术总结

1.TDD(test-driven development)

虽然经常看到TDD这个属于,从本人的工作经历看,实际开发中用得相对较少。

2.unitest(单元测试)

go语言开发中,使用testify进行单元测试开发。

(1)创建测试文件

测试文件以xxx_test.go命名,与xxx.go在同一目录下。示例:main.go和mian_test.go在同一目录下。

(2)编写测试函数

测试函数必须Test作为前缀,后面跟被测试函数名,示例:被测试函数名称为IndexHandler,测试函数名称为TestIndexHandler。

main.go:

// main.go
package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func IndexHandler(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{"message": "hello world"})
}

func SetupServer() *gin.Engine {
    router := gin.Default()
    router.GET("/", IndexHandler)
    return router
}
func main() {
    err := SetupServer().Run()
    if err != nil {
       return
    }
}

main_test.go:

package main

import (
	"github.com/stretchr/testify/assert"
	"io"
	"net/http"
	"net/http/httptest"
	"testing"
)

func TestIndexHandler(t *testing.T) {
	// 不适用 testify
	// 注意,因为`{"message":"hello world"}`是字符串,所以冒号后面如果有空格,在判断相等的时候也会有影响
	// mockUserResp := `{"message":"hello world"}`
	//
	// ts := httptest.NewServer(SetupServer())
	// defer ts.Close()
	//
	// res, err := http.Get(ts.URL + "/")
	// if err != nil {
	// 	t.Fatalf("Expected no error: got %v", err)
	// }
	//
	// defer res.Body.Close()
	//
	// if res.StatusCode != http.StatusOK {
	// 	t.Fatalf("Expected status code 200: got %v", res.StatusCode)
	// }
	//
	// // ioutil.ReadAll 已不推荐使用
	// // responseData, err := ioutil.ReadAll(res.Body)
	// responseData, err := io.ReadAll(res.Body)
	// if string(responseData) != mockUserResp {
	// 	t.Fatalf("Expected hello world message: got %v", string(responseData))
	// }

	// 使用 testify
	mockUserResp := `{"message": "hello world"}`

	ts := httptest.NewServer(SetupServer())
	defer ts.Close()

	res, err := http.Get(ts.URL + "/")
	defer res.Body.Close()

	assert.Nil(t, err)
	assert.Equal(t, http.StatusOK, res.StatusCode)

	responseData, err := io.ReadAll(res.Body)
	assert.Equal(t, mockUserResp, string(responseData))
}

(3)执行测试

go test

3.coverage(测试覆盖率)

p282, Test coverage describes how much of a package's code is exercised by running the package's tests.

4.integration test(集成测试)

integration test就是多个功能一起测试。

5.security test(安全测试)

go语言开发中,使用gosec进行安全测试。

6.postman

书上介绍了postman的collection, environment, scripts的使用,基本属于工作中常用到的操作。当然,postman本身也不复杂。

go语言开发中,使用

7.吐槽系列

// chapter 01

router := gin.Default()

// chapter 07

r := gin.Default()

作者在chapter 01用的名称是router, 那么在chapter 07也应该用这个,而不是r,保持字段名称的一致性!想起本人在实际工作中遇到的一个项目,其中表示“设备”的名称就用了三个:eqp, equip, equipment,但其实都是指同一个东西,这无形中会导致一些问题:(1)阅读代码的人会有疑问,这三个表示的是同一个东西吗?(2)写代码的时候得思考,用的是哪个名称。

二、英语总结

无。

三、其它

今天没有什么想说的。

四、参考资料

1. 编程

(1) Mohamed Labouardy,《Building Distributed Applications in Gin》:https://book.douban.com/subject/35610349

2. 英语

(1) Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org

欢迎搜索及关注:编程人(a_codists)

标签:http,p272,err,res,分布式应用,test,gin,go,Gin
From: https://www.cnblogs.com/codists/p/18518605

相关文章

  • 利用classfinal-maven-plugin对jar进行加密,防止反编译
    背景:将jar包部署到其他服务器,如何保证自己的jar不会被反编译解密一、如何打包成加密的jar1、在pom文件中,添加这两项A、<dependency><groupId>net.roseboy</groupId><artifactId>classfinal-maven-plugin</artifactId><version>1.2.1<......
  • 一. nginx学习笔记 又长又臭篇幅
    目录引言Nginx简介Nginx的特点和优势适用场景安装Nginx在Windows上安装Nginx在Linux(CentOS)上安装Nginx基本配置Nginx配置文件结构启动、停止和重载Nginx基本的服务器块配置处理静态文件设置文档根目录配置MIME类型优化静态文件服务反向代理反向......
  • 服务器漏洞修复和php一键安装包环境 nginx 安装拓展模块
    服务器漏洞修复header头缺失问题https://blog.51cto.com/u_16213703/10249280add_headerX-XSS-Protection'1;mode=block';add_headerX-Frame-OptionsSAMEORIGIN;add_headerX-Content-Type-Optionsnosniff;add_headerX-Download-Options:noopen;......
  • HuggingFace情感分析任务微调
    官方教程地址:https://huggingface.co/learn/nlp-course/zh-CN/chapter3/1?fw=pt部分内容参考:李福林,&计算机技术.(2023).HuggingFace自然语言处理详解:基于BERT中文模型的任务实战.清华大学出版社.HuggingFace将AI项目研发分为四个步骤,准备数据集、定义模型、......
  • nginx服务
    IspSrv服务WEB服务安装nginx软件包。创建ispweb.chinaskills.cn站点。配置文件名为ispweb.conf,放置在/etc/nginx/conf.d/目录下。网站根目录为/mut/crypt(目录不存在需创建)。启用FastCGI功能,让nginx能够解析php请求。index.php内容使用Welcometo2023ComputerNetworkA......
  • Paper Reading: Mixed Bagging: A Novel Ensemble Learning Framework for Supervised
    目录研究动机文章贡献本文方法分组混合Bagging增量混合Bagging实验结果本文方法的设置数据集和实验设置对比实验优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节还需要以原文的内容为准,博客中的图......
  • Hugging Face 与 TruffleHog 合作,实现风险预警
    我们非常高兴地宣布与TruffleSecurity建立合作伙伴关系并在我们的平台集成TruffleHog强大的风险信息扫描功能。这些特性是我们持续致力于提升安全性的重要举措之一。TruffleHog是一款开源工具,用于检测和验证代码中的机密信息泄露。它拥有广泛的检测器,覆盖多种流行SaaS......
  • 配置Nginx/Redis开机自启
    1.进入/etc/systemd/system目录cd/etc/systemd/system2.创建nginx.service文件vimnginx.service3.配置nginx.service内容*ExecStart,ExecStop,ExecReload以服务器实际存放位置为准[Unit]Description=TheNGINXHTTPandreverseproxyserverAfter=network.targe......
  • Nginx配置日志切割
    1.进入/etc/logrotate.d目录cd/etc/logrotate.d2.创建nginx日志切割脚本vimnginx3.输入以下内容*注意 /home/data/nginx/logs/*.log以实际服务器要存放日志文件为准/home/data/nginx/logs/*.log{dailysize10Mminsize10Mrotate30......
  • 《使用Gin框架构建分布式应用》阅读笔记:p251-p271
    《用Gin框架构建分布式应用》学习第14天,p251-p271总结,总21页。一、技术总结1.Docker&DockerComposeversion:"3.9"services:api:image:apienvironment:-MONGO_URI=mongodb://admin:password@mongodb:27017/test?authSource=admin&readPreference=p......