golang相关
go test 介绍
https://geektutu.com/post/quick-go-test.html https://pkg.go.dev/testing
go modules
依赖管理
https://blog.golang.org/using-go-modules
slice
go中数组的赋值和函数传参都是值传递。
切片是对数组的一个连续片段的引用。
|
|
- 扩容
- 首先判断,如果新申请容量(cap)大于2倍的旧容量(old.cap),最终容量(newcap)就是新申请的容量(cap)
- 否则判断,如果旧切片的长度小于1024,则最终容量(newcap)就是旧容量(old.cap)的两倍,即(newcap=doublecap)
- 否则判断,如果旧切片长度大于等于1024,则最终容量(newcap)从旧容量(old.cap)开始循环增加原来的 1/4,即(newcap=old.cap,for {newcap += newcap/4})直到最终容量(newcap)大于等于新申请的容量(cap),即(newcap >= cap)
- 如果最终容量(cap)计算值溢出,则最终容量(cap)就是新申请容量(cap)
数组容量cap超过最大值时,才会创建新的底层数组。
slice range value为值拷贝
|
|
map
map的key只能为可以进行比较的类型;float类型也可以,但是map在进行比较float类型时会先转换为int64再进行比较,会有意想不到的效果,有坑。
map的数据结构:hash table和search tree
哈希查找表用一个哈希函数将 key 分配到不同的桶(bucket,也就是数组的不同 index)。这样,开销主要在哈希函数的计算以及数组的常数访问时间。在很多场景下,哈希查找表的性能很高。
哈希查找表一般会存在“碰撞”的问题,就是说不同的 key 被哈希到了同一个 bucket。一般有两种应对方法:链表法
和开放地址法
。链表法
将一个 bucket 实现成一个链表,落在同一个 bucket 中的 key 都会插入这个链表。开放地址法
则是碰撞发生后,通过一定的规律,在数组的后面挑选“空位”,用来放置新的 key。
interface
channel
调度
gc
/Users/anpuqiang/Documents/hugoblog/blog/content/post/golang_gc.md
并发
- 原文作者:nepp
- 原文链接:https://nepp-an.github.io/post/go_%E4%BD%BF%E7%94%A8/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。