Go

CGO封装CPP库的一些最佳实践

Go
总计 4059 字
背景 最近业务上需要复用CPP编写的客户端SDK库,为了让团队主力语言Golang能够顺利接入SDK,因此使用了CGO桥接技术将C++11编写

用Go STL查询DB引发的内存泄露

Go
总计 4054 字
问题起因 这几天有一个 Go API service 经过定时监控发现占用的内存不断上涨,内存从初始的 70M 一直上升到超过 1G 直到吃光内存退出,基本上就可以断定是存在内存泄露

理解 CPU Cache 对并发性能的影响

Go
总计 461 字
一般来说每个 CPU 核有 L1 和 L2 缓存,L3是共享缓存 以缓存行为单位存储,通常是 64 字节为一行 这种利用局部性原理的缓存是数组访问比链表访问快的主要原因 伪

Go中反序列化后的类型转换问题记录

Go
总计 310 字
在 Go 语言的世界中,类型转换基本上都是很显式的,但最近在编写 web 后台的时候需要进行 context 之间的共享传值,常常就会出现 interface{} 的转换, 最常见的做法就是进行 type

通过Go HTTP Client的报错看标准库https请求

Go
总计 2981 字
在用 Go 自带的 http client 进行默认 Get 操作的时候,发现如下错误 x509: certificate signed by unknown authority 这个报错来自 crypto/x509 中关于证书签名的验证 负责验证证书的方法签名 func (c *Certificate) Verify(opts VerifyOptions) (chains [][]*Certificate, err error) 关于

无缓冲通道引发的BUG

Go
总计 540 字
最近在刚玩具级的 MapReduce ,其中充斥着大量的并发编程的代码,稍有不慎就可能导致 Map 或者 Reduce 的时候遭遇到未知的阻塞状态 (Blocking),导致整个系统无

在 Gin 中实践TDD测试API

Go
总计 1337 字
如果这篇文章能够从此让你放下手中的快递员,从此开始做一个 TDD First 的 programmer ,那么本文的目的也就达到了 Why TDD is so important? TDD 的重要性最直接的体现就是 No guessing 和 Robu

Go下解析XML文档时的编码问题

Go
总计 141 字
最近在弄一些 RSS 解析的东西,记录一下如何解析非UTF-8编码 XML 文档,直接上代码 package rss_test import ( "bytes" "encoding/xml" "fmt" "io" "testing" "github.com/yujiahaol68/rossy/rss" "golang.org/x/net/html/charset" ) func Test_notUTF8(t *testing.T) { r := rss.New() // 注意不要使用 xml.Unmarshal() 这个方法,