参考答案
结论:Go程序启动历经汇编引导、运行时初始化、调度器启动,最终执行main函数。核心要点:1.入口为runtime.rt0_go汇编,设置栈、解析参数;2.调用runtime.osinit获取CPU数等,runtime.schedinit初始化栈、内存分配器、GC、创建P(按GOMAXPROCS);3.通过runtime.newproc创建main goroutine封装main.main,入队;4.runtime.mstart启动M进入调度循环,调度执行main goroutine;5.main结束后调用runtime.exit退出。整个过程隐藏了运行时初始化细节。