[Go - Note] Channel 阻塞deadlock和panic情况,以及close channel

2020-02-20
阅读 1 分钟
4.1k
阻塞: 发生一直阻塞时,会报如下deadlock错误: {代码...} 无缓存channel: 通道中无数据,但执行读通道。 通道中无数据,向通道写数据,但无协程读取。 有缓存channel: 通道的缓存无数据,但执行读通道。 通道的缓存已经占满,向通道写数据,但无协程读。 Panic: 1.向已经关闭的channel写。2.关闭已经关闭的channel...

[Go - Note] go中json序列化(Encode)和反序列化(Decode)以及struct tag

2020-01-27
阅读 1 分钟
4k
import "encoding/json" struct tag {代码...} Encode func Marshal(v interface{}) ([]byte, error) omitempty: struct字段若有次tag,序列化时若为零值则在结果中忽略次字段 Decode func Unmarshal(data []byte, v interface{}) error 区分nil和zeroValue:对零值非nil字段可用在构造的struct中用指针方式检验对应字段...

[Go - Basic] Print相关

2020-01-27
阅读 2 分钟
1.4k
log和fmt中都有Printf,Println,Printf 三个函数实现,区别再去log是线程安全且有格式便于定制存储log, 所以如果为了输出log用log包,如果为了格式化字符串用fmt包。

[Go - Note] go中new和make分配变量的区别

2019-12-30
阅读 1 分钟
1.7k
与其他语言中的同名方法不同是,go中的new不会初始化内存,而仅仅是赋予零值,也就是说返回一个新分配的类型的零值的指针(*T)。这样创建的变量可以不用进一步初始化就可以直接使用。

[Go - Note] http.Response.Body 多次读取处理

2019-12-11
阅读 1 分钟
7.2k
问题 在使用gin框架时(其他框架或原生request也类似)遇到需要先读取body再把body作为参数传给其他函数或方法处理的情况,但用 {代码...} 读取body后,再次读取body为空或出错。 解决方案 利用 ioutil包提供的以下函数 {代码...} 具体代码参考如下: {代码...} 此外,如以上代码所示,可以用c.Set()写入键值对,后续可...

[Go - Basic] Time相关

2019-12-05
阅读 2 分钟
1.3k
import "time" 类型 {代码...} 常用函数和方法 {代码...} time和string转换 {代码...} 获取当天零点时间戳 {代码...} 获取本周周一零点时间戳(以周一为起始周) {代码...}

[Go - Basic] 基本变量类型转换

2019-12-04
阅读 1 分钟
1.6k
数字转字符串 import "strconv" int -> string {代码...} int64 -> string {代码...} 字符串转数字 import "strconv" string -> int {代码...} string -> int64 {代码...}