日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Go1.18新特性:編譯后的二進(jìn)制文件,將包含更多信息

我有一個(gè)朋友,,開開心心入職,想著施展拳腳,第一個(gè)任務(wù)就是對(duì)老舊的二進(jìn)制文件進(jìn)行研究。

網(wǎng)站的建設(shè)創(chuàng)新互聯(lián)專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為茶藝設(shè)計(jì)等企業(yè)提供專業(yè)服務(wù)。

他一看,這文件,不知道是編譯器用什么參數(shù),是怎么編譯出來的,環(huán)境不知道是什么,更不知道來自什么代碼分支?

這除了是項(xiàng)目流程上的問題外,Go 在這塊也有類似的小問題,處理起來比較麻煩。

背景

日常中很難從 Go 二進(jìn)制文件中檢索元信息,要么是信息完全缺失,要么提取需要對(duì)二進(jìn)制文件進(jìn)行大量解析。

包含的元信息如下:

元信息

提取處

Go 構(gòu)建版本

符號(hào)表,通過全局變量 ??runtime.buildVersion?? 來獲取

構(gòu)建信息,例如:模塊和版本

符號(hào)表,通過全局變量 ??runtime/debug.modinfo?? 來獲取

編譯器選項(xiàng),例如:構(gòu)建模式、編譯器、gcflags、ldflags 等

無法獲取

用戶定義的自定義數(shù)據(jù),例如:應(yīng)用程序版本等

需在編譯時(shí)設(shè)置全局字符串變量,才可以獲取

關(guān)注到編譯器選項(xiàng),也就是參數(shù)等都是無法得知的,也就是會(huì)提高獲取如何編譯出來的難度。

新提案

Michael Obermüller 提出了一個(gè)新的提案《cmd/go: add compiler flags, relevant env vars to 'go version -m' output》用于解決上述問題。

在提案中想要的是 JSON 格式的結(jié)構(gòu)輸出:

{
"version": "go1.13.4",
"compileropts": {
"compiler": "gc",
"mode": "pie",
"os": "linux",
...
},
"buildinfo": {
"path": "腦子進(jìn)煎魚了",
"main": {
"path": "HelloWorld",
"version": "(devel)",
},
"deps": []
},
"user": {
"customkey": "customval",
...
}
}

Russ Cox 表示由于編譯信息已有既有格式,并且默認(rèn)使用 JSON 只會(huì)讓二進(jìn)制文件變得更大。好處少,沒必要,改為了選項(xiàng)化的支持。

新的 Go1.18 版本中,可以通過既有的:

go version -m

查看到提案所提到的信息。

例如:

$ gotip version
go version devel go1.18-eba0e866fa Mon Oct 18 22:56:07 2021 +0000 darwin/amd64
$ gotip build ./
$ gotip version -m ko
...
build compiler gc
build tags goexperiment.regabiwrappers,goexperiment.regabireflect,goexperiment.regabiargs
build CGO_ENABLED true
build CGO_CPPFLAGS
build CGO_CFLAGS
build CGO_CXXFLAGS
build CGO_LDFLAGS
build gitrevision 6447264ff8b5d48aff64000f81bb0847aefc7bac
build gituncommitted true

若需要輸出 JSON 格式,也可以通過指定 go version -json 達(dá)到一樣的效果。

在上面的輸出中,現(xiàn)有的編譯器選項(xiàng)等都會(huì)包含在內(nèi),能夠讓大家對(duì)整體編譯后的二進(jìn)制文件溯源有一個(gè)更好的認(rèn)知。

總結(jié)

在今天這篇文章中,給大家介紹了 Go1.18 的一個(gè)新的變化。

新版本中,編譯器選項(xiàng)/參數(shù)、相關(guān)環(huán)境變量等,將會(huì)包含在編譯后的二進(jìn)制文件中,能夠更便于后人排查和查看信息。


標(biāo)題名稱:Go1.18新特性:編譯后的二進(jìn)制文件,將包含更多信息
本文地址:http://m.5511xx.com/article/ccodjdd.html