go中的算术移位

使用代码统计给定整型值中 1 的个数时,对于负数,发现程序会陷入死循环。思考后发现,go 语言中进行算术移位时,如果操作数为负数,移位后结果最终会停留到-1

Read full post gblog_arrow_right

使用fan-out模型进行并发

go编程中可通过go func()直接启动一个gouroutine进行并发操作。go语言一句很有名的经典语是不要通过共享内存来通信,而是通过通信来共享内存,此处的共享内存通常情况下指的都是channel。本文介绍如何使用fan模式实现go的并发控制,以达到控制goroutine数量、从同一数据源读取数据并发处理的目的。

Read full post gblog_arrow_right

go中如何反序列化interface对象

工作中经常要调用别的业务团队提供的API接口。在被调方未提供SDK的情况下,需要手动执行http请求以获取相关数据。同一业务不同API的响应,基本都会遵循统一个数据格式,抽象如下:

type Base struct {
	Data interface{} `json:"data"`
}

type Info struct {
	Field1  int `json:"field1"`
	Insides []struct {
		Field2 int `json:"field2"`
	} `json:"insides"`
}

如此,就免去了对于不同接口通用外部Base部分的重复定义,只需定义各自的Info字段并将其赋值给Base.Data即可。但开发时很容易误用值赋值而非指针赋值,就会导致程序panic。

Read full post gblog_arrow_right