包含标签 Go 的文章

Go 1.22 - 更加强大的 Go 执行跟踪

原文:Michael Knyszek - 2024.03.14 runtime/trace 包含了一款强大的工具,用于理解和排查 Go 程序。这个功能可以生成一段时间内每个 goroutine 的执行追踪。然后,你可以使用 go tool trace 命令(或者优秀的开源工具 gotraceui)来可视化和探索这些追踪数据。 追踪的魔力在于,它可以轻易地揭示出程序中那些难以通过其他方式看到的信息。例如,一个并发瓶颈……

阅读全文

Go Run - Go 语言中的简洁指令

原文:breadchris - 2024.02.21 也许听起来有些傻,但go run是我最喜欢的 Go 语言特性。想要运行你的代码?只需go run main.go。它是如此简单,我可以告诉母亲这个命令,她会立即理解。就像 Go 语言的大部分功能一样,这个命令的真正威力在于它让理解如何构建和运行任何人的代码变得轻而易举。 我可以运行node ma……

阅读全文

13 年后,我如何用 Go 编写 HTTP 服务(译)

原文:Mat Ryer - 2024.02.09 大约六年前,我写了一篇博客文章,概述了我是如何用 Go 编写 HTTP 服务的,现在我再次告诉你,我是如何写 HTTP 服务的。 那篇原始的文章引发了一些热烈的讨论,这些讨论影响了我今天的做事方式。在主持 Go Time podcast、在X/Twitter上讨论 Go 以及通过多年的代码维护经验后,我认为是时候进行一次更新了。……

阅读全文

jsonpatch lib | 更易用的 Kubenetes Patch 库

jsonpatch 详见: https://github.com/chinaran/jsonpatch K8s Patch 在开发 controller/operator 时,经常会对 CR 资源进行更新操作, 可使用 update/apply 进行更新,但有可能会导致冲突 (Conflict)。 如果只是小范围更新,推荐使用 patch 操作。 kubectl patch 可参考官方示例: https://kubernetes.io/docs/reference/kubectl/cheatsheet/#patching-resources 所以基于 https://github.com/mattbaird/jsonpatch,封装了一个更易用的 jsonpatch 库,目前够用。 引用 1 go get……

阅读全文

quick-debug | 容器程序调试利器,如本地运行般丝滑

quick-debug 项目详见:详见: https://github.com/chinaran/quick-debug 要解决什么问题 随着 k8s 的越来越流行,大多数项目都部署在 k8s 中,开发环境也是。 但调试稍微麻烦,至少需要替换 docker 镜像(此时还需要提 git 提交,CICD 构建镜像,自动或手动部署,时间较长)。 可见即所得的调试(类似前端本地调试或本地有开发环境)对开发者更友好,也会节约很多时间。 应用场景 本地无法搭建……

阅读全文

go-httpbin, http 请求测试工具推荐

httpbin 是什么 A simple HTTP Request & Response Service (written in Python + Flask). 一个简单的 HTTP 请求和回复测试服务。 详见: https://httpbin.org/ httpbin 用途 http 开发调试 httpbin 提供了 GET/PUT/POST/PATCH/DELETET 常见方法,可以把请求头、参数等返回,类似 Echo 服务。方便调试 http 请求。 http 库测试 使用开源或者自己项目封装的 http 请求库,可以把 httpbin 作为服务端,测试各种场景。 除了在线的 https://httpbin.org/,也可以本……

阅读全文

Golang debuglog 库,调试程序时快捷查看变量值

概览 在调试 golang 程序时,加断点查看变量值固然是一种方法,但更多的时候只是简单的加个 log 看一下。 可以 fmt.Printf("%+v", xxx), 如果想查看 json 还要转换,很麻烦。 于是,我封装了一个简便的 debuglog 库,用于 debug 变量。 详见 https://github.com/chinaran/debuglog debuglog.Val(): 打印变量 debuglog.SpewVal(): 使用 spew 库打印变量(可以详细看到结构体每个字段的定义和值) debuglog.ToJson(): 转成 json 字符串打印 debuglog.ToJsonPretty(): 有缩进和换行的 json 字符串 调试好程序解决 bug……

阅读全文

Golang httputil 库,一行代码搞定 http 请求

概览 在 golang 程序中进行 http 请求时,一般的步骤是: 组合 url 和 param 参数 get 和 put 需要准备请求体数据 进行 http 请求(设置超时) 错误判断和状态码判断 http 返回内容解析 如果后端程序每个 http 请求都如上面这样处理,将产生很多相似的代码, 并且在复制代码的时候,容易出错(需要修改的地方忘记修改),浪费 debug 的时间。 于是,我封装了一个简便的 httputil 库,……

阅读全文

Golang 八进制 utf-8 编码转中文

概览 当调试程序,打印出变量的值时,有可能输出的是八进制 utf-8 编码(尤其是 protobuf 变量) 例如:\346\200\241\346\200\241\346\200 这样的字符串如果作为字面量,go 可以自动转化, 但如果是从文件或 string 中读取,就不行了。 可以使用正则表达式简单处理下 代码示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18……

阅读全文

Golang IP 地址字符串整数/string int 相互转换

概览 Go 中没有 C 语言 inet_aton 和 inet_ntoa 类似的转换 IP 函数, 所以需要手动封装两个函数 (转换的方法有多种,我选择了简洁的) 实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package main import ( "fmt" "math/big" "net" ) func InetNtoA(ip int64) string { return fmt.Sprintf("%d.%d.%d.%d", byte(ip>>24), byte(ip>>16), byte(ip>>8), byte(ip)) } func InetAtoN(ip string) int64 { ret := big.NewInt(0) ret.SetBytes(net.ParseIP(ip).To4()) return ret.Int64() } func main() { ip := "192.168.78.123" ipInt := InetAtoN(ip) fmt.Printf("convert string ip [%s] to int: %d\n", ip, ipInt) fmt.Printf("convert int ip [%d] to string: %s\n", ipInt, InetNtoA(ipInt)) } 注:InetAtoN 最……

阅读全文

最近文章

分类

标签

其它