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

news2024/11/24 17:54:03

《用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://www.coloradmin.cn/o/2229682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三种SPI机制的了解及使用

文章目录 1.SPI机制概念2.Java SPI2.1 创建一个项目,并创建如下模块2.2 db-api模块2.3 mysql-impl模块2.4 oracle-impl模块2.5 main-project模块 3.Spring SPI4.Dubbo SPI 1.SPI机制概念 SPI全程Service Provider Interface,是一种服务发现机制。 SPI的…

【Linux系统编程】第四十弹---深入理解操作系统:信号捕捉、可重入函数、volatile关键字与SIGCHLD信号解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、捕捉信号 1.1、内核如何实现信号的捕捉 1.2、内核态与用户态 1.3.1、用户态(User Space) 1.3.2、…

【面试】数组中 Array.forEach()、Array.map() 遍历结束后是否改变原数组

forEach 、map 同理 数组内元素是 基本数据类型 时, 1.1. 直接给 item赋值,是 不会改变原数组 的(如图中1), 1.2. 通过 原数组索引赋值 是会改变原数组的(如图中2)数组内元素是 复杂数据类型 时…

List<T>属性和方法使用

//author:shark_ddd using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//使用函数来减少长度namespace List_T {class Student{public string Name { get; set; }public int Age { get; set; …

liunx CentOs7安装MQTT服务器(mosquitto)

查找 mosquitto 软件包 yum list all | grep mosquitto出现以上两个即可进行安装,如果没有出现则需要安装EPEL软件库。 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm查看 mosquitto 信息 yum info mosquitto安装 mosquitt…

视频去水印软件哪个好?这些软件值得一试

无论是社交媒体上的短视频,还是专业网站上的长视频,去除视频中的水印成为了许多人的需求。 选择一款合适的视频去水印软件,可以帮助我们轻松去除视频中的不必要标记,保持视频的完整性和美观。 那么,视频去水印软件哪…

qt QDoubleSpinBox详解

1、概述 QDoubleSpinBox是Qt框架中的一个控件,专门用于浮点数(即小数)的输入和调节。它提供了一个用户界面元素,允许用户在预设的范围内通过拖动滑块、点击箭头或使用键盘来递增或递减浮点数值。QDoubleSpinBox通常用于需要精确数…

在基于AWS EC2的云端k8s环境中 搭建开发基础设施

中间件下载使用helm,这里部署的都是单机版的 aws-ebs-storageclass.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: aws-ebs-storageclass provisioner: kubernetes.io/aws-ebs parameters:type: gp2 # 选择合适的 EBS 类型,如 gp2、io1…

MATLAB与STK互联:仿真并获取低轨卫星与指定区域地面站的可见性数据

MATLAB控制STK实现:仿真并获取低轨卫星与指定区域地面站的可见性数据 本次仿真主要参考了多篇文献和网站,包括但不限于:《Using MATLAB for STK Automation》、CSDN博文: 拜火先知的博客_CSDN博客-笔记、AGI官网有关MATLAB的内容…

docker engine stopped

1)环境:win 10 2)docker安装时已经已经安装了虚拟机 3)启用网络适配器 4)启用docker服务(依赖服务LanmanServer) 5)全都弄好了,docker还是打不开,没办法了&a…

天翼网关 3.0 兆能 ZNHG600 获取超级密码改桥接

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 前不久朋友家断网,喊了宽带师傅修完之后,光猫就从桥接模式变成了路由模式。虽然对于日常上网来说区别不大,但这条宽带有公网 IP,通过光猫拨号的话&#xff0…

C语言常见进制 (二进制、八进制、十进制、十六进制)详解

C语言常见进制的详解 放在最前面的前言:1、分类2、二进制(2.1)二进制的解释说明(2.2)关于二进制的计算(2.3) 二进制转换为八进制(2.4) 二进制转换为十进制 3、八进制&…

在 .NET 8 Web API 中实现 Entity Framework 的 Code First 方法

本次介绍分为3篇文章: 1:.Net 8 Web API CRUD 操作.Net 8 Web API CRUD 操作-CSDN博客 2:在 .Net 8 API 中实现 Entity Framework 的 Code First 方法https://blog.csdn.net/hefeng_aspnet/article/details/143229912 3:.NET …

初识动态规划(由浅入深)

🤓 动态规划入门与进阶指南 📘 动态规划(Dynamic Programming, DP)是一种非常经典的📐算法方法,特别适合用来解决那些有大量重复计算的问题🌀。它可以将复杂的问题拆分为小问题🧩&a…

【STM32】SD卡

(一)常用卡的认识 在学习这个内容之前,作为生活小白的我对于SD卡、TF卡、SIM卡毫无了解,晕头转向。 SD卡:Secure Digital Card的英文缩写,直译就是“安全数字卡”。一般用于大一些的电子设备比如:电脑、数码相机、AV…

《JVM第5课》虚拟机栈

无痛快速学习入门JVM,欢迎订阅本免费专栏 Java虚拟机栈(Java Virtual Machine Stack,简称JVM栈,又称Java方法栈)是 JVM 运行时数据区的一部分,主要用于支持Java方法的执行。每当一个新线程被创建时&#xf…

Java Executor RunnableScheduledFuture 总结

前言 相关系列 《Java & Executor & 目录》《Java & Executor & RunnableScheduledFuture & 源码》《Java & Executor & RunnableScheduledFuture & 总结》《Java & Executor & RunnableScheduledFuture & 问题》 涉及内容 《…

软考(中级-软件设计师)数据库篇(1101)

第6章 数据库系统基础知识 一、基本概念 1、数据库 数据库(Database ,DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和扩展…

zynq PS端跑Linux响应中断

这篇文章主要是讲述如何在Zynq的PS上跑Linux启动IRQ,环境为vivado2019.1,petalinux2019.1 ubuntu20.04,本人初学者,欢迎批评指正 1. Vivado硬件设计 确保自定义IP的中断信号通过 IRQ_F2P 连接到PS端。在开始Petalinux配置之前&a…

R语言贝叶斯

原文链接:R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa…