如何学习go的源码

如何学习go的源码

举个例子,比如我创建了slice.go

package main

import "fmt"

func main() {
	slice := make([]int, 0)
	slice = append(slice, 1)
	fmt.Println(slice, len(slice), cap(slice))
}

如何去解读slice的append和初始化的源码呢?
可以在终端执行:

go tool compile -S slice.go |grep CALL

我们可以得到如下的汇编代码:

        0x0042 00066 (slice.go:6)       CALL    runtime.makeslice(SB)
        0x006d 00109 (slice.go:7)       CALL    runtime.growslice(SB)
        0x00a4 00164 (slice.go:8)       CALL    runtime.convTslice(SB)
        0x00bc 00188 (slice.go:8)       CALL    runtime.convT64(SB)
        0x00d4 00212 (slice.go:8)       CALL    runtime.convT64(SB)
        0x0163 00355 ($GOROOT/src/fmt/print.go:275)     CALL    fmt.Fprintln(SB)
        0x0178 00376 (slice.go:5)       CALL    runtime.morestack_noctxt(SB)
        0x0040 00064 (<autogenerated>:1)        CALL    runtime.nilinterhash(SB)
        0x0067 00103 (<autogenerated>:1)        CALL    runtime.morestack_noctxt(SB)
        0x007f 00127 (<autogenerated>:1)        CALL    runtime.efaceeq(SB)
        0x00a9 00169 (<autogenerated>:1)        CALL    runtime.morestack_noctxt(SB)
        0x0032 00050 (<autogenerated>:1)        CALL    runtime.throwinit(SB)
        0x0040 00064 (<autogenerated>:1)        CALL    fmt.init(SB)
        0x0055 00085 (<autogenerated>:1)        CALL    runtime.morestack_noctxt(SB)

可以通过上述这种方式,可以获得每行go语言运行哪些方法,便可有目的的去学习go源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值