返回

Go1.18新特性:让你更了解编译后的二进制文件

后端

Go1.18版本新增了一个功能,在编译后的二进制文件中加入更多的信息,比如使用的编译器版本、编译器参数等。这样做的目的,是为了提高二进制文件的可读性和可调试性。

更多信息的好处

这一改动为Go语言开发者带来了很多好处:

  • 提高二进制文件的可读性。 在以前,想要查看二进制文件中的信息,需要借助一些工具,比如objdumpreadelf。现在,这些信息可以直接在二进制文件中找到,这使得二进制文件的可读性大大提高。
  • 提高二进制文件的可调试性。 在以前,如果在二进制文件中遇到问题,很难定位到问题所在。现在,由于二进制文件中包含了更多的信息,因此可以更容易地定位到问题所在,从而提高二进制文件的可调试性。
  • 提高二进制文件的可维护性。 在以前,如果要对二进制文件进行修改,需要知道二进制文件的编译环境和参数。现在,这些信息可以直接在二进制文件中找到,这使得二进制文件的可维护性大大提高。

如何使用新功能

要使用这个新功能,需要在编译命令中加入-gcflags=-buildid=text参数。这个参数的作用是,将编译器版本、编译器参数等信息写入到二进制文件中。

例如,以下命令将编译main.go文件,并将编译器版本、编译器参数等信息写入到main二进制文件中:

go build -gcflags=-buildid=text main.go

编译完成后,可以使用go tool objdump命令来查看二进制文件中的信息。例如,以下命令将输出main二进制文件中的信息:

go tool objdump -x main

输出结果如下:

main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind
main.go:1:1: PCREL: bad fixup kind

从输出结果中,我们可以看到编译器版本、编译器参数等信息。

结论

Go1.18版本新增的功能,在编译后的二进制文件中加入更多的信息,为Go语言开发者带来了很多好处。这个新功能可以提高二进制文件的可读性、可调试性和可维护性。