golang 异步抢占例子
golang 异步抢占例子,继上篇文章《golang 非协作式抢占》添加一些手操事例 一定要go1.14以后的版本,本文版本 go version go1.15.1 linux/amd64 源码cat main.go package main import ( "fmt" "golang.org/x/ »
golang 异步抢占例子,继上篇文章《golang 非协作式抢占》添加一些手操事例 一定要go1.14以后的版本,本文版本 go version go1.15.1 linux/amd64 源码cat main.go package main import ( "fmt" "golang.org/x/ »
总结一下碰到的一些range问题,尤其是边loop边delete的骚操作,我一直以为是人家开源库的bug,直到我看到golang官方也这么用。 首先是比较经典的问题,我们团队之前确实有人写这样代码出事了。 v是数据复制 代码本意是为了获取每个slice每个元素的指针,构造成新的slice type P struct { Name string Age int } func main() { o := []P{ P{"chain1", 20}, P{"chain2", 21} »
被虐了,原来go里面的nil可以调用方法,但是成员变量会panic https://github.com/go-delve/delve/pull/1722#discussion_r336509209 package main import ( "fmt" ) type Blah struct { } func (b *Blah) Foo() { fmt.Printf("hello! »
Start a new project, the debugger on linux platform for go. This project is inspired by dlv github地址 背景 没想到这个项目最终还是沦为为一个玩具。初次有这个想法是因为发现 gdb调试golang代码是可以进入runtime的指令,而dlv却不可以。例如像map这种的初始化 s := make( »
slice 对于slice来说,其实源码部分并不多,主要看一下make slice、growslice、slicecopy和copy 编译阶段 make slice语句跟map一样,在compile的typecheck阶段,将MAKE节点偷偷换成OMAKESLICE节点 关于oppend的代码实在/usr/local/go/src/cmd/compile/internal/gc/ssa.go的func (s *state) append( »
defer 这个话题有点大,只是翻阅了关键代码,细节太多了 主要defer要弄明白两个函数,函数目录在/usr/local/go/src/runtime/panic.go中的deferproc和deferreturn deferproc //主要这里面都不能使用栈分裂,不能进行逃逸分析,因为defer是希望利用栈内存处理 //go:nosplit func deferproc(siz int32, fn *funcval) { ... d »
NaN 之前阅读源码,发现golang的可比性和map里面都有NaN的特判 以前写js可知,NaN与任何浮点型比较都是false,包括它自己 // main.go package main import ( "fmt" "math" ) type TestFloat struct { Float64 float64 `json:"float64"` } func main() { mp := make(map[float64] »
序 关于map的实现,我按照我的思路来看源码,中间尝试了挺多的case,最终选了一些来作为实例 可能跟网上其他人不太一样 准备工作 首先做一些准备工作,跳过一下与编译无关的过程,例如搜索依赖关系 样例代码 新建临时目录test_map,在该目录下写入样例代码 // main.go package main import ( "fmt" ) func test_map() { s := make(map[ »