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

Go 每日一库之 goquery

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

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

标签: goquery

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

Golang 短网址服务核心代码

Golang 短网址服务核心代码

在一些应用的分享文案中,经常需要包含一个打开实际页面的链接,而这个链接可能会非常的长(因为可能会有很多很多参数。。)这样的分享文案不仅不够美观,而且在一些平台会受到限制,比如weibo的140字。这时候我们就需要采用一个短链接服务了。
短链服务实际上是对长链接的一个1对N映射。在访问短链的时候,通过应用或web服务器进行跳转,就能访问到实际的页面。我们只需将长链完成映射,存储这样的对应关系,就实现了短链生成服务。

标签: 短网址

smarteng 发布于 2021-11-16 07:59

使用Golang的官方mock工具--gomock、mockgen

在Golang的官方Repo(https://github.com/golang/)中有一个单独的工程叫"mock"(https://github.com/golang/mock),虽然star不是特别多,但它却是Golang官方放出来的mock工具,充这这点我们也需要使用下,虽然并不是官方的就是最好(比如比标准库http更快的fasthttp)。

标签: gomock mockgen

smarteng 发布于 2021-11-15 07:01

golang中validator参数校验器自定义规则及提示

在golang中自定义错误信息的展示

标签: validator

smarteng 发布于 2021-11-12 11:51

Golang中validator库参数校验若干实用技巧

本文介绍了使用validator库做参数校验的一些十分实用的使用技巧,包括翻译校验错误提示信息、自定义提示信息的字段名称、自定义校验方法等。

validator库参数校验若干实用技巧

在web开发中一个不可避免的环节就是对请求参数进行校验,通常我们会在代码中定义与请求参数相对应的模型(结构体),借助模型绑定快捷地解析请求中的参数,例如 gin 框架中的 BindShouldBind 系列方法。本文就以 gin 框架的请求参数校验为例,介绍一些 validator 库的实用技巧。
gin框架使用github.com/go-playground/validator进行参数校验,目前已经支持 github.com/go-playground/validator/v10 了,我们需要在定义结构体时使用 binding tag标识相关校验规则,可以查看validator文档查看支持的所有 tag。

标签: validator

smarteng 发布于 2021-11-12 11:49

使用go-playground/validator实现请求参数验证并输出中文错误信息

实现目标

go-playground/validator 原始的参数验证错误信息为英文字符串,很不友好。
在网上找到了这篇文章,解决了大部分问题。但是返回的错误信息没有分字段,且没有真实字段名,对前端来说不友好。
最后自己动手稍作改造,先看看最后实现的结果:

标签: validator

smarteng 发布于 2021-11-12 11:46

Golang urlencode与urldecode编码解码

为什么需要编码和解码

1.是因为当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的;
2.因为 url 对字符有限制,比如把一个邮箱放入 url,就需要使用 urlencode 函数,因为 url 中不能包含 @ 字符;
3.url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。


smarteng 发布于 2021-11-8 03:23

博主

    blogger

    smarteng

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

日历

恰饭

标签