[转]阅读Go源码的顿悟时刻
摘要:文章转自:https://zhuanlan.zhihu.com/p/2119163293 我对各个顿悟时刻简单的总结如下: 切片 为什么切片操作后总返回一个新切片:因为其内部的数组会在容量满后自动扩容 预先分配切片的大小避免扩容是个好办法 协程是合作式的(cooperative) go 中高效的 G
阅读全文
【记录】arm64体系结构下写golang plan9汇编,怎么查有哪些指令?
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 方法 1:看源码 github.com/golang/go/src/cmd/internal/obj/arm64/anames.go: 这个位置有所有 arm
阅读全文
【解决了一个小问题】aws s3 sdk 中的自定义header设置哪些不参与aws v4 签名
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 在通过代理访问 s3 服务端的时候,s3 服务端返回类似的错误信息: <?xml version="1.0" encoding="UTF-8" standal
阅读全文
【解决了一个小问题】错误配置 s3 sdk 的 part size 导致 oom
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 某服务上线后,运行一段程序崩溃,一开始以为是panic,为所有的go出来的协程都加上了recover()处理,仍然未找到崩溃原因。 更奇怪的是,在 aws 云
阅读全文
【发现一个小问题】golang http client: 配置了Client 对象的 Timeout 就会导致 context.WithTimeout() 模式的超时控制失效
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我这样初始化了客户端: var client = http.Client{Timeout:time.Duration(1000) * time.Millise
阅读全文
【介绍一个组件】go: Copy-On-Write map,对读极多和写极少的场景做优化
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 代码请看:https://github.com/ahfuzhang/cowmap 有这样一种场景:数据量不多的map,在使用中读极多写极少。为了在这种场景下做
阅读全文
分享一个项目:go `file_line`,在编译期得到源码行号,减少运行期runtime消耗
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 file_line https://github.com/ahfuzhang/file_line Like __FILE__/__LINE__ of C: u
阅读全文
【踩了一个坑】为什么 golang struct 中的 slice 无法原子赋值
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 有这样一个结构体: type MySt struct{ Field []byte } 我在数组排序中想要交换值: func Swap(arr []MySt,
阅读全文
【笔记】学到几个 golang 代码小技巧
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 从这篇文章学到:10个令人惊叹的Go语言技巧,让你的代码更加优雅 myfunc()() 这样的函数调用 假设调用一个函数写成myfunc()(),第一反应是“
阅读全文
【学到一个新名词】String interning(字符串驻留/字符串内部化)
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 在阅读 VictoriaMetrics v1.95.1 的命令行手册的时候,发现这样一段: -internStringCacheExpireDuration
阅读全文
【记录一个问题】golang 中的 ecdsa(椭圆曲线加密) 算法很慢,因为用到了系统调用
摘要:代码中使用了椭圆曲线算法来签名,实际运行中发现不够快: func BenchmarkECDSA(b *testing.B) { privateKeyInst, err := parseSignatureKey(privateKey) if err != nil { b.Error(err.Error
阅读全文
分享一个项目:`learning_go_plan9_assembly`, 学习 golang plan9 汇编
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 近期在学习 golang plan9 汇编,总算基本做到了手写汇编,并整理了很多笔记。 plan9 汇编的资料少,难学,难用。可能也有想学习汇编的人会遇到与我
阅读全文
golang 中使用 writev (sendmsg) 系统调用来一次发送多块数据
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 writev,或者说 sendmsg 等系统调用,能够发送多个数据块。从节约系统调用次数的角度说,这个 api 非常好。 下面演示如何在 golang 中使用
阅读全文
fasthttp 中如何使用 linux 系统调用 `sendfile`
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 接上一篇:fasthttp 中如何使用Transfer-Encoding: chunked 方式的流式内容输出 首先是找了一个库,封装了 linux 下的 s
阅读全文
fasthttp 中如何使用`Transfer-Encoding: chunked` 方式的流式内容输出
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 具体的思路是这样:通过 RequestCtx 的 Conn() 方法,获得 tcp 套接字。然后直接在 tcp 套接字上 Write 流式内容就行。 上代码:
阅读全文
【发现一个问题】使用 fastcgo 导致额外的 `runtime._System` 调用的消耗
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 为了避免 cgo 调用浪费太多资源,因此使用了 fastcgo(github.com/petermattis/fastcgo) 这个库。 单单跑 benchm
阅读全文
玩一玩 golang 汇编(二)
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 上次玩 golang 汇编是使用了一个 python 的 intel 汇编转换 plan9 汇编的工具,很不好用。 本次试试一些 golang 实现的工具。
阅读全文
【介绍一个工具】图形化界面查看一个 golang 二进制文件的汇编代码
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 通常,可以通过命令行工具,来查看一个代码文件对应的汇编代码: go build -gcflags -S api.go // 或者 go tool compil
阅读全文
【发现一个问题】macos m2 下无法使用 x86_64-linux-musl-gcc 链接含有 avx512 指令的 c 代码
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 一开始是使用 golang 中的 cgo 来编译: env CC= c CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \ CGO
阅读全文
interface{}类型 + fmt.Sprintf() 导致栈逃逸
摘要:作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 对部分代码进行了栈逃逸检查: go build -gcflags="-m -m" pkg/*.go 2>&1 | grep -v "pb.go" 类似的位置,
阅读全文