Golang嵌入資源文件實(shí)現(xiàn)步驟詳解
Go文檔中展示了多種方式實(shí)現(xiàn)外部資源嵌入,包括文本文件、圖片、ios文件等:
文本文件
package main
import _ "embed"
//go:embed schema.sql
var tableCreate string
func main() {
print(tableCreate)
}
在構(gòu)建時(shí),schema.sql內(nèi)容會(huì)嵌入至應(yīng)用中,使得tableCreate字符串變量可用。與通過(guò)環(huán)境變量嵌入信息至應(yīng)用類(lèi)似。
輸出結(jié)果:
create table sys_user(
id int,
name varchar(36),
birth date
)
圖片文件
如果是圖片,可以編碼為二進(jìn)制字節(jié)切片:
package main
import (
_ "embed"
"encoding/base64"
)
//go:embed logo.png
var logo []byte
func main() {
print(base64.RawStdEncoding.EncodeToString(logo))
}
鏡像文件
一旦在內(nèi)存中,logo文件就可以通過(guò)HTTP連接提供給客戶(hù)端使用。使用embed.FS接口與上面示例不同,數(shù)據(jù)僅當(dāng)需要時(shí)才會(huì)加載至內(nèi)存,這種方法對(duì)于大文件非常有用:
package main
import (
"embed"
"fmt"
)
//go:embed ubuntu-20-cloud.iso
var f embed.FS
func main() {
data, _ := f.ReadFile("ubuntu-20-cloud.iso")
fmt.Printf("Total bytes: %d\n", len(data))
}
Go是一種非常好的系統(tǒng)編程語(yǔ)言,它提供了許多用于管理文件系統(tǒng)和網(wǎng)絡(luò)的包,應(yīng)用可能會(huì)在程序中發(fā)送類(lèi)似ISO映像文件,可以隨時(shí)將其寫(xiě)入磁盤(pán)中。
前端應(yīng)用文件
有時(shí)希望把前端應(yīng)用的文件嵌入至應(yīng)用中,和http服務(wù)一起實(shí)現(xiàn)完整web應(yīng)用。
// frontend holds our static web server content.
//go:embed image/* template/*
//go:embed public/index.html
//go:embed css/*var frontend embed.FS
現(xiàn)在可以簡(jiǎn)單連接embed.FS至自定義HTTP中間件或處理器,從特點(diǎn)路由或路徑給用戶(hù)提供文件。下面時(shí)Go文檔中提供的示例:
http.Handle( "/public/",
http.StripPrefix( "/public/",
http.FileServer( http.FS(frontend))))
你的API可以被綁定到路徑/API/v1/,然后你嵌入的任何靜態(tài)內(nèi)容都會(huì)通過(guò)/public/路由提供訪問(wèn)。
編譯打包
go build .
通過(guò)編譯打包,會(huì)生成獨(dú)立可執(zhí)行文件??截愔寥魏文夸浺部梢灾苯舆\(yùn)行,不會(huì)因?yàn)檎也坏劫Y源文件而報(bào)錯(cuò)。
到此這篇關(guān)于Golang嵌入資源文件實(shí)現(xiàn)步驟詳解的文章就介紹到這了,更多相關(guān)Go嵌入資源文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang?墻上時(shí)鐘與單調(diào)時(shí)鐘的實(shí)現(xiàn)
本文主要介紹了golang?墻上時(shí)鐘與單調(diào)時(shí)鐘的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Go語(yǔ)言使用Timeout Context取消任務(wù)的實(shí)現(xiàn)
本文主要介紹了Go語(yǔ)言使用Timeout Context取消任務(wù)的實(shí)現(xiàn),包括基本的任務(wù)取消和控制HTTP客戶(hù)端請(qǐng)求的超時(shí),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
Golang中可比較的數(shù)據(jù)類(lèi)型詳解
在日常開(kāi)發(fā)中,比較操作是最常用的基本操作之一,可以用來(lái)判斷變量之間是否相等或者對(duì)應(yīng)的大小關(guān)系,本文將深入解析 Golang 中可比較的數(shù)據(jù)類(lèi)型,并結(jié)合代碼示例來(lái)說(shuō)明如何在不同情況下進(jìn)行比較,需要的朋友可以參考下2024-01-01
自己動(dòng)手用Golang實(shí)現(xiàn)約瑟夫環(huán)算法的示例
這篇文章主要介紹了自己動(dòng)手用Golang實(shí)現(xiàn)約瑟夫環(huán)算法的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Go語(yǔ)言七篇入門(mén)教程四通道及Goroutine
這篇文章主要為大家介紹了Go語(yǔ)言的通道及Goroutine示例詳解,本文是Go語(yǔ)言七篇入門(mén)系列篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Golang中interface是引用類(lèi)型的原因解析
在Go語(yǔ)言中,將interface設(shè)計(jì)為引用類(lèi)型是為了實(shí)現(xiàn)更靈活、更動(dòng)態(tài)的類(lèi)型系統(tǒng),這篇文章主要介紹了深度解析Golang中為什么interface是引用類(lèi)型,需要的朋友可以參考下2024-01-01

