亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

打包方法

直接在文件中定義

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

var text = `xxx`

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

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

通過(guò)工具轉(zhuǎn)換

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

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

但是這個(gè)工具在3年前就不再更新了, 為什么呢? 因?yàn)楣俜街С至?

go build

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

其大致用法如下:

import "embed"

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

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

// 同時(shí)打包多個(gè)文件. 后接文件名或目錄
//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用來(lái)打包單個(gè)文件, embed.FS可以打包一批文件. 使用也比較簡(jiǎn)單, 看下文檔就行了.

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

總結(jié)

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

至于其他語(yǔ)言, 比如PHP/Python等, 本來(lái)就是一堆源文件, 不會(huì)打包成二進(jìn)制, 應(yīng)該也不會(huì)有這種需求吧.

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

相關(guān)文章

  • go語(yǔ)言優(yōu)雅地處理error工具及技巧詳解

    go語(yǔ)言優(yōu)雅地處理error工具及技巧詳解

    這篇文章主要為大家介紹了go語(yǔ)言優(yōu)雅地處理error工具及技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Go實(shí)現(xiàn)簡(jiǎn)易R(shí)PC框架的方法步驟

    Go實(shí)現(xiàn)簡(jiǎn)易R(shí)PC框架的方法步驟

    本文旨在講述 RPC 框架設(shè)計(jì)中的幾個(gè)核心問(wèn)題及其解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Go 字符串格式化的實(shí)例代碼詳解

    Go 字符串格式化的實(shí)例代碼詳解

    這篇文章主要介紹了Go 字符串格式化的實(shí)例代碼詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Golang中切片的用法與本質(zhì)詳解

    Golang中切片的用法與本質(zhì)詳解

    Go的切片類型為處理同類型數(shù)據(jù)序列提供一個(gè)方便而高效的方式,下面這篇文章就來(lái)給大家介紹了關(guān)于Golang中切片的用法與本質(zhì)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • go語(yǔ)言用八百行代碼實(shí)現(xiàn)一個(gè)JSON解析器

    go語(yǔ)言用八百行代碼實(shí)現(xiàn)一個(gè)JSON解析器

    這篇文章主要為大家介紹了go語(yǔ)言用八百行代碼實(shí)現(xiàn)一個(gè)JSON解析器實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Go語(yǔ)言context?test源碼分析詳情

    Go語(yǔ)言context?test源碼分析詳情

    這篇文章主要介紹了Go語(yǔ)言context?test源碼分析詳情,關(guān)于context?test,測(cè)試對(duì)象是context包,測(cè)試包的包名是context_test,下面將對(duì)context?test源碼進(jìn)行分析,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2022-02-02
  • Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析

    Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析

    這篇文章主要為大家介紹了Golang?errgroup?設(shè)計(jì)及實(shí)現(xiàn)原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • golang redigo發(fā)布訂閱使用的方法

    golang redigo發(fā)布訂閱使用的方法

    本文主要介紹了golang redigo發(fā)布訂閱使用的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Golang處理parquet文件實(shí)戰(zhàn)指南

    Golang處理parquet文件實(shí)戰(zhàn)指南

    這篇文章主要給大家介紹了關(guān)于Golang處理parquet文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Go語(yǔ)言實(shí)現(xiàn)Base64、Base58編碼與解碼

    Go語(yǔ)言實(shí)現(xiàn)Base64、Base58編碼與解碼

    本文主要介紹了Base64、Base58編碼與解碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論