Go run 的执行过程详解

4 min read
  1. 解析命令参数:首先解析命令行参数,检查并设置运行参数。例如,检查是否传递了需要运行的Go文件的路径、是否设置了参数等。

  2. 设置环境变量:设置环境变量(比如$GOPATH、$GOROOT等),并添加到系统环境变量中以便运行时可用。

  3. 构建程序:将Go源码编译为机器代码。 Go源文件中的代码会被编译成以".o"为扩展名的目标文件,然后这些目标文件会被链接在一起,生成可执行文件。

  4. 运行程序:Go程序实现了不同操作系统的"main"函数,将程序运行起来。当你执行"Go run yourfile.go"时,实际上是先调用了Go编译器将"yourfile.go"文件编译成二进制文件,然后再运行这个二进制文件。

  5. 编译优化:在Go运行时,代码会进行优化,包括代码消除、控制流简化、变量提升等。这些优化操作帮助提高程序执行效率,减少资源使用。

  6. 执行GC:Go程序中的垃圾回收器(GC)会自动收集程序中不再使用的内存。 在Go运行时,垃圾回收可能会消耗大量时间。为了最大程度地减少程序的暂停时间,Go使用了一种叫"并发标记-清除(concurrent mark and sweep)"的方式,在程序运行时并发执行垃圾回收操作。

  7. 结束程序:程序运行结束后,Go运行时会释放所有内存并关闭所有相关的文件,然后结束程序执行。