最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言編譯時為exe添加圖標和屬性信息的方法

 更新時間:2023年09月22日 08:51:42   作者:守望時空33  
在使用Go語言開發(fā)應用程序時,有個非常方便的地方就是編譯得到的可執(zhí)行文件可以不依賴任何動態(tài)鏈接庫、并且不需要任何運行環(huán)境即可運行,本文給大家介紹Go編譯時為exe添加圖標和屬性信息的方法,需要的朋友可以參考下

在使用Go語言開發(fā)應用程序時,有個非常方便的地方就是編譯得到的可執(zhí)行文件可以不依賴任何動態(tài)鏈接庫、并且不需要任何運行環(huán)境即可運行,這一點Java就沒那么方便了。

不過在Windows上編譯得到的exe文件,默認是不帶圖標和任何屬性信息的,那么怎么才能讓我們編譯得到的可執(zhí)行文件帶上圖標和屬性信息呢?

事實上,借助go-winres這款命令行工具即可很方便地實現。

1,安裝go-winres命令

執(zhí)行下列命令即可安裝go-winres命令到電腦中:

go install github.com/tc-hib/go-winres@latest

2,創(chuàng)建配置模板

我們首先需要一個配置文件來指定我們的圖標文件和屬性信息,然后將它們編譯得到資源文件,最后將資源文件和Go源代碼一起編譯即可得到帶有圖標的可執(zhí)行文件了!

我們可以先生成一個配置模板,然后進行修改即可,執(zhí)行下列命令:

go-winres init

然后在當前目錄下,你會發(fā)現多了個winres目錄,其中winres.json就是配置文件,而兩個png文件則是它自帶的圖標文件:

3,修改配置

使用文本編輯器打開winres.json文件,其中有一些初始內容:

其中的大致結構我們不需要修改,基本上就是修改指定其中部分字段值即可。

下面,我們來單獨看一下每個部分。

(1) 圖標指定

我們來看看圖標部分,聲明在json文件中的RT_GROUP_ICON屬性中:

"RT_GROUP_ICON": {
	"APP": {
		"0000": [
			"icon.png",
			"icon16.png"
		]
	}
}

上述APP表示一組圖標,其中還有一個0000,表示語言,不過這兩個屬性名稱都不需要怎么動,重點是看0000這個屬性,它是一個數組,而很顯然數組中記錄著一組圖標,在其中可以指定不同分辨率的圖標。在這里指定的圖標就會被應用到最終編譯的可執(zhí)行文件上去。

圖標文件可以就是png文件,將它和winres.json放在同一目錄下,然后在這個0000數組中指定圖標文件名即可。

假設我現在需要自定義圖標,并且只需要一個文件,那么我可以先刪除里面自帶的兩個png文件,然后把我的圖標放在和winres.json同級目錄下:

然后修改圖標部分配置如下:

"RT_GROUP_ICON": {
	"APP": {
		"0000": [
			"my-icon.png"
		]
	}
}

這樣,圖標就指定完成了!

需要注意的是,圖片文件尺寸不能大于256 x 256

(2) 軟件清單

軟件清單部分聲明在RT_MANIFEST屬性中:

"RT_MANIFEST": {
	"#1": {
		"0409": {
			"identity": {
				"name": "",
				"version": ""
			},
			"description": "",
			"minimum-os": "win7",
			"execution-level": "as invoker",
			"ui-access": false,
			"auto-elevate": false,
			"dpi-awareness": "system",
			"disable-theming": false,
			"disable-window-filtering": false,
			"high-resolution-scrolling-aware": false,
			"ultra-high-resolution-scrolling-aware": false,
			"long-path-aware": false,
			"printer-driver-isolation": false,
			"gdi-scaling": false,
			"segment-heap": false,
			"use-common-controls-v6": false
		}
	}
}

上述并非所有屬性都需要填寫和修改,這里將重要的部分講解一下:

  • description 文件的描述信息
  • minimum-os 最低要求操作系統(tǒng),可以是以下值:
    • "vista"
    • "win7"
    • "win8"
    • "win8.1"
    • "win10"
  • execution-level 應用程序所需的權限,可以是:
    • "as invoker" 不需要任何權限
    • "highest" 使用當前用戶的可用最高權限
    • "administrator" 強制要求管理員權限才能運行

對于identify屬性,普通應用程序建議留空即可,也可以將其刪除。

(3) 元數據信息

這部分定義在RT_VERSION屬性中:

"RT_VERSION": {
	"#1": {
		"0000": {
			"fixed": {
				"file_version": "0.0.0.0",
				"product_version": "0.0.0.0"
			},
			"info": {
				"0409": {
					"Comments": "",
					"CompanyName": "",
					"FileDescription": "",
					"FileVersion": "",
					"InternalName": "",
					"LegalCopyright": "",
					"LegalTrademarks": "",
					"OriginalFilename": "",
					"PrivateBuild": "",
					"ProductName": "",
					"ProductVersion": "",
					"SpecialBuild": ""
				}
			}
		}
	}
}

這里也并非所有屬性都需要填寫和修改,這里將重要的部分講解一下:

  • fixed 屬性中的兩個屬性,主要是聲明文件版本和程序版本,按照x.y.z.w的格式自己填寫即可
  • info 主要是屬性信息,其中0409是英語的語言代碼,表示在英文環(huán)境下顯示其中的屬性,在info中可以定義多個語言環(huán)境下的屬性信息,具體大家可以查看官方項目示例,在其中:
    • CompanyName 公司名稱
    • FileDescription 文件描述
    • FileVersion 文件版本
    • ProductVersion 程序版本
    • LegalCopyright 版權信息
    • OriginalFilename 原始文件名
    • ProductName 程序名稱

(4) 簡易winres.json模板

可見上述有許多屬性是我們大多數時候不需要進行設定的,可以刪除,因此這里我提供一個模板,大家可以復制作為自己的winres.json文件使用:

{
	"RT_GROUP_ICON": {
		"APP": {
			"0000": [
				"my-icon.png"
			]
		}
	},
	"RT_MANIFEST": {
		"#1": {
			"2052": {
				"description": "我的Go示例程序",
				"minimum-os": "win7",
				"execution-level": "highest",
				"ui-access": false,
				"auto-elevate": false,
				"dpi-awareness": "system",
				"disable-theming": false,
				"disable-window-filtering": false,
				"high-resolution-scrolling-aware": false,
				"ultra-high-resolution-scrolling-aware": false,
				"long-path-aware": false,
				"printer-driver-isolation": false,
				"gdi-scaling": false,
				"segment-heap": false,
				"use-common-controls-v6": false
			}
		}
	},
	"RT_VERSION": {
		"#1": {
			"0000": {
				"fixed": {
					"file_version": "1.0.0.0"
				},
				"info": {
					"2052": {
						"CompanyName": "公司名稱",
						"FileDescription": "我的Golang示例程序",
						"LegalCopyright": "? 版權",
						"OriginalFilename": "demo.exe",
						"ProductName": "Go示例",
						"ProductVersion": "1.0.0.0"
					}
				}
			}
		}
	}
}

大家修改其中信息為自己的即可。

4,編譯資源

winres文件夾所在目錄下執(zhí)行命令

go-winres make

此時你會發(fā)現多了這幾個syso文件,這就是編譯得到的資源:

需要注意的是,上述命令的運行路徑是winres文件夾所在目錄下,而不是winres文件夾里面。

當然,你也可以使用--in參數指定json文件位置,如果你的運行路徑不在winres文件夾的所在目錄下的話:

# 指定json配置文件在上一級目錄的res目錄中
go-winres make --in "../res/winres.json"

還可以使用--out參數指定輸出的資源文件位置,具體大家可以通過命令go-winres make --help查看幫助。

5,編譯Go程序

首先確保上述編譯得到的兩個syso資源文件和Go語言模塊配置go.mod在同級目錄下:

然后像平時一樣,在go.mod所在目錄下執(zhí)行構建命令即可:

go build -ldflags "-w -s"

這樣,我們得到的可執(zhí)行文件就有圖標和屬性信息了!

上述命令中,ldflags參數指定的是去除調試和符號信息以減小構建產物文件大小,這個參數可以省略。

可見我們編譯得到的資源文件都有著類似_windows_amd64這樣的后綴,這個后綴是用于go build命令鏈接資源時,根據架構判斷鏈接哪個資源用的,例如當我們編譯64位程序時,go build就會自動尋找名為xxx_windows_amd64.syso的資源文件進行鏈接,同樣地如果是編譯為32位程序,則是尋找名為xxx_windows_386.syso的資源文件,因此syso資源文件的文件名必須是xxx_windows_amd64.syso這樣的形式,不可以修改其后綴。

與此同時,在進行go build時,go.mod文件必須要和syso文件在同一目錄下,如果沒有go.mod文件,那主程序文件(被編譯的)就需要和syso文件在同一目錄下。

以上就是Go語言編譯時為exe添加圖標和屬性信息的方法的詳細內容,更多關于Go exe添加圖標和屬性信息的資料請關注腳本之家其它相關文章!

相關文章

  • Golang?WorkerPool線程池并發(fā)模式示例詳解

    Golang?WorkerPool線程池并發(fā)模式示例詳解

    這篇文章主要為大家介紹了Golang?WorkerPool線程池并發(fā)模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Golang指針的操作以及常用的指針函數

    Golang指針的操作以及常用的指針函數

    本文主要介紹了Golang指針的操作以及常用的指針函數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • go通過編碼縮短字符串的長度實現方法步驟

    go通過編碼縮短字符串的長度實現方法步驟

    這篇文章主要為大家介紹了go通過編碼縮短字符串的長度實現方法步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go 加密解密算法小結

    Go 加密解密算法小結

    加密解密在實際開發(fā)中應用比較廣泛,常見的加解密分為三種,本文就詳細的介紹一下Go 加密解密算法,具有一定的參考價值,感興趣的可以了解一下
    2022-01-01
  • idea搭建go環(huán)境實現go語言開發(fā)

    idea搭建go環(huán)境實現go語言開發(fā)

    這篇文章主要給大家介紹了關于idea搭建go環(huán)境實現go語言開發(fā)的相關資料,文中通過圖文介紹以及代碼介紹的非常詳細,對大家學習或者使用go具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • Go Struct結構體的具體實現

    Go Struct結構體的具體實現

    Go語言中通過結構體的內嵌再配合接口比面向對象具有更高的擴展性和靈活性,本文主要介紹了Go Struct結構體的具體實現,感興趣的可以了解一下
    2023-03-03
  • 一文帶你使用golang手擼一個websocket中間件

    一文帶你使用golang手擼一個websocket中間件

    這篇文章主要為大家詳細介紹了如何使用golang手擼一個websocket中間件,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以參考一下
    2023-12-12
  • golang之log rotate詳解

    golang之log rotate詳解

    下面小編就為大家?guī)硪黄猤olang之log rotate詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • golang反向代理設置host不生效的問題解決

    golang反向代理設置host不生效的問題解決

    在使用golang的httputil做反向代理的時候,發(fā)現一個奇怪的現象,上游網關必須要設置host才行,不設置host的話,golang服務反向代理請求下游會出現http 503錯誤,接下來通過本文給大家介紹golang反向代理設置host不生效問題,感興趣的朋友一起看看吧
    2023-05-05
  • 初識Golang?Mutex互斥鎖的使用

    初識Golang?Mutex互斥鎖的使用

    在學習操作系統(tǒng)的時候,我們應該都學習過臨界區(qū)、互斥鎖這些概念,用于在并發(fā)環(huán)境下保證狀態(tài)的正確性。在?Go語言?里面互斥鎖是?sync.Mutex?,我們本篇文章就來學習下為什么要使用互斥鎖、如何使用互斥鎖,以及使用時的常見問題
    2022-10-10

最新評論

无为县| 革吉县| 曲水县| 磐石市| 郸城县| 晋江市| 宜昌市| 云梦县| 安徽省| 松阳县| 焉耆| 嘉义市| 壶关县| 呼伦贝尔市| 宾阳县| 灌阳县| 古田县| 陵川县| 稻城县| 昌图县| 黔江区| 象山县| 乌鲁木齐县| 弥渡县| 广饶县| 武强县| 阳朔县| 轮台县| 鄱阳县| 中卫市| 新宁县| 凉山| 许昌县| 夏河县| 顺昌县| 改则县| 成安县| 灵璧县| 威海市| 赤水市| 仁布县|