go语言string、int、int64互相转换

string到int

int,err:=strconv.Atoi(string)

string到int64

int64, err := strconv.ParseInt(string, 10, 64)

int到string

string:=strconv.Itoa(int)

int64到string

string:=strconv.FormatInt(int64,10)


smarteng 发布于 2022-4-1 11:27

golang-使用 go test 输出单元测试覆盖率

一、背景

单元测试覆盖率是衡量代码质量的一个重要指标,重要的代码文件覆盖率应该至少达到80%以上。Java 可以通过JaCoCo 统计覆盖率,那么go 项目如何进行代码覆盖率测试呢?

二、统计方式

1、生成覆盖率报告(go test 指令)

我们知道直接执行测试代码的指令: go test 指定文件名称 -run “测试方法”。
项目工程是如下架构的,可以通过这种方式生成覆盖率报告:
go test -mod=vendor -covermode=count -coverprofile=coverprofile.cov -run="^Test" -coverpkg=$(go list -mod=vendor ./… | grep -v “/test” | tr ‘\n’ ‘,’) ./…
生成结果:coverprofile.cov

指令简单说明:
mod=vendor: 加载依赖的方式:从本地vendor 目录加载。适用于服务器不能从外网下载依赖的情况
covermode: count: 统计代码访问次数;set: 统计代码是否被访问; atomic: 一般在并发工程中使用(?)
run: 正则方式指定需要运行的测试方法
coverpkg: 指定业务代码路径,多个用逗号隔开,详细说明在后面
./…:遍历当前目录下测试文件,包括子目录
关于为什么要使用coverpkg:
主要是因为我们的项目结构中,测试代码和业务代码是分开的,而不是放到同一个目录中。因此如果只指定测试方法,就无法识别到业务代码,来计算覆盖率了。
因此我们既需要指定测试代码路径(当然这里声明为 ./… 就可以了,只有_test 结尾的方法会自动作为测试方法),也需要指定业务代码路径(通过grep -v 和 tr 指令,最终将业务代码输出成 git/controller,git/database 的格式)

2、打开覆盖率报告

通过html 文件打开(推荐,能看到方法细节):
go tool cover -html=coverprofile.cov
在命令行直接查看:
go tool cover -func=coverprofile.cov

三、展望

当然我们可能会遇到一些特殊情况:比如不希望将init 方法也列入统计等等,这些后续再补充。


smarteng 发布于 2022-3-29 06:20

统计 Golang 项目的测试覆盖率

我们的项目主要基于 Golang 开发,公司要求统计测试覆盖率。所以,我们摸索了一下在 Golang 下如何统计整个项目得测试覆盖率


smarteng 发布于 2022-3-29 03:41

golang goquery selector(选择器) 使用

最近研究Go爬虫相关的知识,使用到goquery这个库比较多,尤其是对爬取到的HTML进行选择和查找匹配的内容时,goquery的选择器使用尤其多,而且还有很多不常用但又很有用的选择器,这里总结下,以供参考。
如果大家以前做过前端开发,对jquery不会陌生,goquery类似jquery,它是jquery的go版本实现。使用它,可以很方便的对HTML进行处理。

标签: goquery

smarteng 发布于 2021-12-9 09:29

golang中设置Host Header的小Tips

最近在使用go的http包的时候遇到的问题:

client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)

//这样设置无效
res.Header.Set("Host", "xxx.xxx")

res, err := client.Do(req)

if err != nil {
return
}
defer res.Body.Close()

js, err = simplejson.NewFromReader(res.Body)
return

//设置Host需要这样处理
res.Host = "xxx.xxx"

smarteng 发布于 2021-11-24 11:00

Linux抓包工具Tcpdump使用示例教程

tcpdump 是一款强大的网络抓包工具,它使用 libpcap 库来抓取网络数据包,这个库在几乎在所有的 Linux/Unix 中都有。熟悉 tcpdump 的使用能够帮助你分析调试网络数据,本文将通过一个个具体的示例来介绍它在不同场景下的使用方法。不管你是系统管理员,程序员,云原生工程师还是 yaml 工程师,掌握 tcpdump 的使用都能让你如虎添翼,升职加薪。


smarteng 发布于 2021-11-24 09:57

腾讯云挂载初始化云硬盘

操作场景

本文档介绍如何初始化已挂载至云服务器的空云硬盘,在云硬盘上创建文件系统并向其中写入一个名为 qcloud.txt 的文件。

说明
关于初始化云硬盘的更多信息,请参考 初始化场景介绍


smarteng 发布于 2021-11-24 08:55

如何在 CentOS 上修改主机名

通常主机名在操作系统安装过程中设置或者在创建虚拟机的过程中动态指定的。
有很多原因,你需要去改变主机名。最常见的原因就是,当自动创建实例的时候,需要自动设置主机名。
这篇指南解释了如何在 CentOS 8 上修改主机名,而不需要重启系统。
想要修改 CentOS 系统的主机名,使用 hostnamectl set-hostname 命令加上新的主机名进行修改。

标签: hostname

smarteng 发布于 2021-11-22 12:25

漫谈非加密哈希算法(MurMurHash,CRC32,FNV,SipHash,xxHash)

HASH算法介绍

  • Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一地确定输入值。
  • 数学表述为:h = H(M) ,其中H( )--单向散列函数,M--任意长度明文,h--固定长度散列值。
标签: 算法

smarteng 发布于 2021-11-22 03:20

Go 每日一库之 goquery

简介
goquery是用 Go 语言编写的一个类似于 jQuery 的库。它基于 HTML 解析库net/html和 CSS 库cascadia,提供与 jQuery 相近的接口。Go 著名的爬虫框架colly就是基于 goquery 的。

快速使用
本文代码使用 Go Modules。

标签: goquery

smarteng 发布于 2021-11-19 09:46

python程序在命令行执行提示ModuleNotFoundError: No module named 'XXX' 解决方法

今天遇到一个问题,在Python中,引入其他人写的模块,这个模块是内网的一个模块,不能发布到外网,就产生从本地引入模块的问题,折腾很急才解决问题。
还是引入的路径问题。
首先 git clone 下来要引入的模块。
在引入的模块中写自己的逻辑:

标签: Python

smarteng 发布于 2021-11-17 05:14

博主

    blogger

    smarteng

    人生就流星,虽然转瞬即逝,但也有永恒。

日历

恰饭

标签