日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Golang嵌入資源文件實(shí)現(xiàn)步驟詳解_Golang

作者:夢想畫家 ? 更新時(shí)間: 2023-02-25 編程語言

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字符串變量可用。與通過環(huán)境變量嵌入信息至應(yīng)用類似。

輸出結(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文件就可以通過HTTP連接提供給客戶端使用。使用embed.FS接口與上面示例不同,數(shù)據(jù)僅當(dāng)需要時(shí)才會(huì)加載至內(nèi)存,這種方法對于大文件非常有用:

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)編程語言,它提供了許多用于管理文件系統(tǒng)和網(wǎng)絡(luò)的包,應(yīng)用可能會(huì)在程序中發(fā)送類似ISO映像文件,可以隨時(shí)將其寫入磁盤中。

前端應(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)在可以簡單連接embed.FS至自定義HTTP中間件或處理器,從特點(diǎn)路由或路徑給用戶提供文件。下面時(shí)Go文檔中提供的示例:

http.Handle( "/public/",
? ? http.StripPrefix( "/public/",
? ? ? ? http.FileServer( http.FS(frontend))))

你的API可以被綁定到路徑/API/v1/,然后你嵌入的任何靜態(tài)內(nèi)容都會(huì)通過/public/路由提供訪問。

編譯打包

go build .

通過編譯打包,會(huì)生成獨(dú)立可執(zhí)行文件。拷貝至任何目錄也可以直接運(yùn)行,不會(huì)因?yàn)檎也坏劫Y源文件而報(bào)錯(cuò)。

原文鏈接:https://blog.csdn.net/neweastsun/article/details/128437948

欄目分類
最近更新