Go1.18 新特性:编译后的二进制文件,将包含更多信息

Posted 脑子进煎鱼了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go1.18 新特性:编译后的二进制文件,将包含更多信息相关的知识,希望对你有一定的参考价值。

大家好,我是煎鱼。

我有一个朋友,,开开心心入职,想着施展拳脚,第一个任务就是对老旧的二进制文件进行研究。

他一看,这文件,不知道是编译器用什么参数,是怎么编译出来的,环境不知道是什么,更不知道来自什么代码分支?

这除了是项目流程上的问题外,Go 在这块也有类似的小问题,处理起来比较麻烦。

来获取构建信息,例如:模块和版本符号表,通过全局变量 runtime/debug.modinfo 来获取编译器选项,例如:构建模式、编译器、gcflags、ldflags 等无法获取用户定义的自定义数据,例如:应用程序版本等需在编译时设置全局字符串变量,才可以获取

关注到编译器选项,也就是参数等都是无法得知的,也就是会提高获取如何编译出来的难度。

达到一样的效果。

在上面的输出中,现有的编译器选项等都会包含在内,能够让大家对整体编译后的二进制文件溯源有一个更好的认知。

总结

在今天这篇文章中,给大家介绍了 Go1.18 的一个新的变化。

新版本中,编译器选项/参数、相关环境变量等,将会包含在编译后的二进制文件中,能够更便于后人排查和查看信息。


关注煎鱼,获取业内第一手消息和知识

go语言-关于文件的操作和解释

一、文件存放的位置

  bin文件:存放编译后的二进制文件

  pkg文件:存放编译后的库文件

  src文件:存放源代码文件

二、运行文件的常用命令

  两种运行区别(直接运行和编译后运行)

           1、编译生成可执行文件,可以在没有go开发环境下运行

           2、编译后的文件会变大很多,因为编译时会将运行的依赖库包含在文件中

           3、直接运行,机器需要有go开发环境

  直接运行程序:在终端输入go run 文件名.go

  编译程序:go build

  编译时修改文件名:go build -o 文件名.go

三、编译成linux文件

    SET CGO_ENABLED=0     //禁用CGO

  SET GOOS=LINUX            //目标平台是linux

       SET GOARCH=amd64      //目标处理器架构是amd64

 

以上是关于Go1.18 新特性:编译后的二进制文件,将包含更多信息的主要内容,如果未能解决你的问题,请参考以下文章

Go官方 - 1.18 发布说明

Go1.18 新特性:弃用 strings.Title 方法,换个新坑吧!

Go1.18 新特性:高效复制,strings, bytes 标准库新增 Clone API

Go1.18 新特性:新增好用的 Cut 方法

Go 1.18 终于来了!

Go 1.18 新特性:多模块工作区模式