4 Go语言程序初始化过程

作为下一章goroutine调度的一个前序,本章先讲一些基础内容,看一看Go语言编写的程序的初始化过程。其实初始化过程中会做很多很多的事情,这里忽略大部分细节,只看一下脉络。从程序入口开始分析也是学习源代码的一个好方式。

首先,写一个hello world文件,内容如下:

  1. package main
  2. import "fmt"
  3. func main() {
  4. fmt.Println("hello world!")
  5. }

编译,使用gdb调试。给下列函数下断点:

  1. _rt0_amd64_darwin
  2. main
  3. _rt0_amd64
  4. runtime.check
  5. runtime.args
  6. runtime.osinit
  7. runtime.hashinit
  8. runtime.schedinit
  9. runtime.newproc
  10. runtime.mstart
  11. main.main
  12. runtime.exit

你可能需要根据自己的系统将_rt0_amd64_darwin改成_rt0_amd64_linux或者别的。在gdb中先点r,回车,然后点c,回车,接着一路回车。

别着急,只是让你有一个直观的感受一下Go程序从系统初始化直到退出必经的流程。下面让我们正式开始吧!