摘要: go的map在面试时候经常会被问到。 最近看到群里有个被问到为什么map的每个桶中只装8个元素? map 的结构 注:解决hash冲突还有一些别的方案:开放地址法 (往目标地址后面放)、再哈希法(再次hash) 底层定义 // A header for a Go map. type hmap str 阅读全文
posted @ 2023-11-28 23:09 杨阳的技术博客 阅读(124) 评论(0) 推荐(0)
摘要: 切片的底层数据结构 有上篇string为基础了,能猜到slice肯定也有一个对应的struct。 在runtime的 slice.go中 type slice struct { array unsafe.Pointer len int cap int } 切片的本质是对数组的引用 len 表示当前已 阅读全文
posted @ 2023-11-28 20:28 杨阳的技术博客 阅读(40) 评论(0) 推荐(0)
摘要: 先上一段代码 : func main() { content := "长沙boy" content1 := "boy" fmt.Printf("content: %d\n", unsafe.Sizeof(content)) fmt.Printf("content1: %d\n", unsafe.Si 阅读全文
posted @ 2023-11-28 18:11 杨阳的技术博客 阅读(114) 评论(0) 推荐(0)
摘要: go的启动入口函数 对go有开发经验的朋友都知道,main函数不是真正的启动入口,只是go暴露给用户编写的业务的接口。 这点上基本所有的语言都是类似,在main函数调用前,go需要做一系列的准备工作。 go的启动在 runtime/rto XXX.s, xxx是因为平台的差异。不同系统不同芯片都有自 阅读全文
posted @ 2023-11-28 12:56 杨阳的技术博客 阅读(151) 评论(0) 推荐(0)
摘要: 一、目的 简单看下go编译过程,便于理解go为什么能编译出不同平台都能运行的可执行文件,克服了c和c++需要针对不同平台分开编译的问题。 那些过程能在开发过程中用到,帮助定位问题。 二、整体 编译前端的都好理解,语义分析时候,需要进行go的逃逸分析。 中间码生成 ssa 任意写一个demo: imp 阅读全文
posted @ 2023-11-28 11:12 杨阳的技术博客 阅读(170) 评论(0) 推荐(0)