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

Go打包附件內(nèi)容到執(zhí)行文件的方法

 更新時間:2023年03月17日 11:40:10   作者:煙草的香味.  
處于種種原因, 我們不希望這部分額外的內(nèi)容以附件的形式出現(xiàn), 有沒有什么辦法能夠將附件內(nèi)容直接打包進可執(zhí)行文件中呢,下面小編給大家介紹下Go打包附件內(nèi)容到執(zhí)行文件的方法,感興趣的朋友一起看看吧

前言

如果我們的應用在啟動的時候需要對數(shù)據(jù)庫進行初始化(比如建表等), 可以通過讀取.sql文件內(nèi)容直接執(zhí)行. 但是, 這樣會帶出一個問題:

  • 在發(fā)送可執(zhí)行文件的時候, 需要連帶著附件文件, 并且相對路徑還不能出錯. 這樣太麻煩了
  • 有時我們并不希望附件的內(nèi)容被使用者看到

處于種種原因, 我們不希望這部分額外的內(nèi)容以附件的形式出現(xiàn), 有沒有什么辦法能夠將附件內(nèi)容直接打包進可執(zhí)行文件中呢?

打包方法

直接在文件中定義

最容易想到的, 就是直接在.go文件中定義字符串, 比如這樣:

var text = `xxx`

如此處理必然是可以的, 但有些不方便.

  • .sql文件可能是通過mysqldump導出的, 每次導出之后還需要將內(nèi)容復制到.go文件中
  • 在編輯.sql文件的時候, IDE會提供語法高亮及輸入提示, 這些在字符串中都是沒有的

通過工具轉換

既然我們想要將內(nèi)容直接放在文件中, 同時又想將內(nèi)容打包到二進制中. 是否可以通過腳本處理呢? 腳本從附件中讀取內(nèi)容, 并寫入到.go文件中.

有一個名為go-bindata 的工具, 做的就是這樣的事情. 具體操作可自行搜索, 這里不做贅述.

但是這個工具在3年前就不再更新了, 為什么呢? 因為官方支持了.

go build

或許是因為這樣的呼聲太大, 在go 1.16版本開始, 官方增加了embed包對這種操作進行了支持, 可以在編譯階段直接將靜態(tài)資源打包到二進制中.

其大致用法如下:

import "embed"

// 將內(nèi)容直接打包到二進制文件中
//go:embed test.txt
var test string

//go:embed test.txt
var test1 []byte

// 同時打包多個文件. 后接文件名或目錄
//go:embed test.txt dir
// 作為文件
var test2 embed.FS

func main() {
	// 輸出文件內(nèi)容
	println(test)
	println(string(test1))
	
	b, err := test2.ReadFile("test.txt")
	if err != nil {
		panic(err)
	}
	println(string(b))
}

其中string/[]byte用來打包單個文件, embed.FS可以打包一批文件. 使用也比較簡單, 看下文檔就行了.

至此, Go程序已經(jīng)可以天然且方便的將資源文件進行打包了.

總結

OK, 現(xiàn)在已經(jīng)完美解決了我們最開始的問題, 以后在項目中遇到類似的需求, 可以直接使用啦.

至于其他語言, 比如PHP/Python等, 本來就是一堆源文件, 不會打包成二進制, 應該也不會有這種需求吧.

到此這篇關于Go打包附件內(nèi)容到執(zhí)行文件的文章就介紹到這了,更多相關go打包附件內(nèi)容到執(zhí)行文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go調用鏈可視化工具使用實例探究

    Go調用鏈可視化工具使用實例探究

    本文介紹一款工具?go-callvis,它能夠將?Go?代碼的調用關系可視化出來,并提供了可交互式的?web?服務,在接手他人代碼或調研一些開源項目時,如果能夠理清其中的代碼調用鏈路,這將加速我們對實現(xiàn)的理解
    2024-01-01
  • Go語言中節(jié)省內(nèi)存技巧方法示例

    Go語言中節(jié)省內(nèi)存技巧方法示例

    這篇文章主要為大家介紹了Go語言中節(jié)省內(nèi)存技巧方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Go語言CSP并發(fā)模型goroutine及channel底層實現(xiàn)原理

    Go語言CSP并發(fā)模型goroutine及channel底層實現(xiàn)原理

    這篇文章主要為大家介紹了Go語言CSP并發(fā)模型goroutine?channel底層實現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Golang中Gin數(shù)據(jù)庫表名前綴的三種方法

    Golang中Gin數(shù)據(jù)庫表名前綴的三種方法

    本文主要介紹了Golang中Gin數(shù)據(jù)庫表名前綴的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • Go語言集成開發(fā)環(huán)境IDE詳細安裝教程

    Go語言集成開發(fā)環(huán)境IDE詳細安裝教程

    VSCode是免費開源的現(xiàn)代化輕量級代碼編輯器,支持幾乎所有主流的開發(fā)語言,內(nèi)置命令行工具和 Git 版本控制系統(tǒng),支持插件擴展,這篇文章主要介紹了Go語言集成開發(fā)環(huán)境IDE詳細安裝教程,需要的朋友可以參考下
    2021-11-11
  • golang的匿名函數(shù)和普通函數(shù)的區(qū)別解析

    golang的匿名函數(shù)和普通函數(shù)的區(qū)別解析

    匿名函數(shù)是不具名的函數(shù),可以在不定義函數(shù)名的情況下直接使用,通常用于函數(shù)內(nèi)部的局部作用域中,這篇文章主要介紹了golang的匿名函數(shù)和普通函數(shù)的區(qū)別,需要的朋友可以參考下
    2023-03-03
  • 詳解go語言中type關鍵詞的幾種使用

    詳解go語言中type關鍵詞的幾種使用

    這篇文章主要介紹了詳解go語言中type的幾種使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • golang croncli 定時器命令詳解

    golang croncli 定時器命令詳解

    定時器是執(zhí)行任務時的常用功能,配置系統(tǒng)的定時任務太麻煩,所以就想用golang簡單實現(xiàn)一個定時器命令,包括定時器命令格式、定時執(zhí)行命令的相關知識,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • PHP與Go語言之間的通信詳解

    PHP與Go語言之間的通信詳解

    相信大家都知道不同語言之間的通信方式有很多種,這篇文章詳細的介紹了PHP與Go語言之間如何通信,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10
  • 在?Golang?中使用?Cobra?創(chuàng)建?CLI?應用

    在?Golang?中使用?Cobra?創(chuàng)建?CLI?應用

    這篇文章主要介紹了在?Golang?中使用?Cobra?創(chuàng)建?CLI?應用,來看下?Cobra?的使用,這里我們使用的?go1.13.3?版本,使用?Go?Modules?來進行包管理,需要的朋友可以參考下
    2022-01-01

最新評論

阿克陶县| 新丰县| 兰溪市| 香格里拉县| 旬邑县| 泰来县| 玉环县| 南京市| 延长县| 西昌市| 松溪县| 江门市| 天祝| 九龙坡区| 英德市| 女性| 探索| 寿光市| 临夏县| 海口市| 胶南市| 永修县| 茂名市| 资中县| 嘉鱼县| 肥西县| 孟津县| 武平县| 怀宁县| 礼泉县| 黎川县| 绥滨县| 麻栗坡县| 龙里县| 南昌县| 桃园县| 宜兴市| 尚志市| 保靖县| 建昌县| 灌南县|