網(wǎng)站首頁 編程語言 正文
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
相關(guān)推薦
- 2022-08-26 C語言數(shù)據(jù)結(jié)構(gòu)之隊(duì)列的定義與實(shí)現(xiàn)_C 語言
- 2022-10-05 linux查看服務(wù)器開放的端口和啟用的端口多種方式_Linux
- 2023-09-18 【解決】npm ERR A complete log of this run can be foun
- 2022-04-28 WPF使用DockPanel停靠面板布局_實(shí)用技巧
- 2022-06-06 Lombok報(bào)錯(cuò):You aren‘t using a compiler supported by
- 2022-01-19 正則表達(dá)式匹配日期格式y(tǒng)yyy-mm-dd(支持閏年)
- 2022-10-28 Go操作Kafka和Etcd方法詳解_Golang
- 2022-12-24 MobPush?for?Flutter集成準(zhǔn)備_IOS
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支