Go 运行机制

Go 运行时(go runtime)的含义?

go 运行时,也称为 go runtime。其本身就是每个 go 程序的一部分,它会跟你的源码一起编译并连接到目标程序中。即便你的代码只是写了一个 hello world 功能,编译成二进制程序后,这个程序中也包含了 runtime 的实现。

它在程序中具体负责什么?runtime 负责实现 Go 的垃圾收集、并发、内存堆栈管理、协程调度器以及 Go 语言的其他关键功能。

go源码编译成go程序后,go程序无需依赖独立安装的go运行时。(与java这种依赖JVM解析运行的编程语言不同)

为什么Go语言适合现代的后端编程环境?

  1. 服务类应用以API居多,IO密集型,且网络IO最多;
  2. 运行成本低,无VM。网络连接数不多的情况下内存占用低;
  3. 强类型语言,易上手,易维护;

为什么适合基础设施?

  • k8s、etcd、istio、docker已经证明了Go的能力

 Go语言的编译过程

使用go build -x xxx.go可以观察这个过程

不同系统的可执行文件规范

以Linux的可执⾏⽂件ELF(Executable and Linkable Format) 为例,ELF 由⼏部分构成:

  • ELF header
  • Section header
  • Sections

操作系统执行可执行文件的步骤(Linux为例):

如何寻找Go进程的入口

通过 entry point 找到 Go进程的执⾏⼊⼝点,使⽤readelf

⼊⼝点指向编译后的main函数

您可能还喜欢...