分类 Golang 中的文章

sync.Map源码阅读笔记

写在前面的碎碎念 Go的原生map不是并发安全的,多个协程并发读写map被竞态检测到时会直接panic掉整个进程,recover都不能cover住…因此在写代码时,只要关于并发读写map都要谨记并发安全,印象中之前组里有出过这样的bug,凌晨左右发现服务莫名其妙挂掉。……

阅读全文

你还在这样写快排?

排序永远是数据结构里永恒的话题,快排、归并排序这样基于分治思想排序的提出,极大的优化了插入排序、冒泡排序这样的O(N^2)排序算法。对于这样基于分治思想的排序,都可以写成多线程算法,但在C/C++下,很少有人把快排写成多线程,因为就pthread线程库来说其实现是与内核线程1:1……

阅读全文

Golang——数组与切片的区别

在Golang中顺序容器有两种,一种是普通的数组,一种是切片。 数组(array) 数组创建方式分为两种,一种是通过字面值,一种是通过new 1555406409236252.png 结果 1555406374767018.png 首先注意到,数组在创建的时候必须是在[ ]中指明了元素个数,或者使用[…]结合{1, 2, 3}来创建也是可以的,因为这样也算是定……

阅读全文

Golang——new与make

在go中要主动把变量定义在堆上只有这两中方法,make与new,二者间的区别是非常大的。 (ps: 为何要强调是主动呢?因为go会做逃逸分析,编译器会帮你去最终哪些变量会放在堆上,因此在go中是不需要像C/C++一样关心变量的开辟位置的) new go中的new与其他语言中的new语义不一样,C+……

阅读全文

知道这个坑,还是踩了

# 不要把全局变量放在任何 “:=“后面!!! * * * 把Db作为全局变量,然后在init中Open的时候因为处理err,于是就 Db, err := sql.Open(“mysql”, dataSource) 结果再测的时候 ![][1] 想了半天怎么会访问非法内存的,后来就想起来了effective go上讲过这个坑,:=每次都会新创建并覆盖上层的……

阅读全文

golang1.4以上版本安装问题

golang在1.4之前是由gcc进行语言源码的编译,在1.5后golang实现自举,因此也专门有了一个1.4-bootstrap版本,用来编译golang1.4后的版本。那么也就是说面,1.4版本之后的版本必须先配置1.4的go环境。 墙无法访问golang.org,需要去国内的……

阅读全文