欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年01月09日 16:27:23   作者:夢(mèng)想畫家  
在應(yīng)用程序中附帶代碼以外的其他資源可能會(huì)很有用,常用的實(shí)現(xiàn)方法是嵌入對(duì)象或數(shù)據(jù)。在數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)應(yīng)用中,需要定義schema,在應(yīng)用啟動(dòng)時(shí)創(chuàng)建表,但如果找不到schema文件呢?Go1.16提供embed包讓實(shí)現(xiàn)變得簡(jiǎn)單,之前很多第三方包實(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字符串變量可用。與通過環(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)存,這種方法對(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ā)送類似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)在可以簡(jiǎ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ò)。

到此這篇關(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)

    本文主要介紹了golang?墻上時(shí)鐘與單調(diào)時(shí)鐘的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Go語(yǔ)言庫(kù)系列之dotsql詳解

    Go語(yǔ)言庫(kù)系列之dotsql詳解

    這篇文章主要介紹了Go語(yǔ)言庫(kù)系列之dotsql的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 一文詳解kubernetes?中資源分配的那些事

    一文詳解kubernetes?中資源分配的那些事

    這篇文章主要為大家介紹了kubernetes?中資源分配的那些事,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go語(yǔ)言使用Timeout Context取消任務(wù)的實(shí)現(xiàn)

    Go語(yǔ)言使用Timeout Context取消任務(wù)的實(shí)現(xiàn)

    本文主要介紹了Go語(yǔ)言使用Timeout Context取消任務(wù)的實(shí)現(xiàn),包括基本的任務(wù)取消和控制HTTP客戶端請(qǐng)求的超時(shí),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • golang中使用mongo的方法介紹

    golang中使用mongo的方法介紹

    這篇文章主要給大家介紹了關(guān)于golang中使用mongo的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Go語(yǔ)言中字符串的查找方法小結(jié)

    Go語(yǔ)言中字符串的查找方法小結(jié)

    這篇文章主要介紹了Go語(yǔ)言中字符串的查找方法小結(jié),示例的main函數(shù)都是導(dǎo)入strings包然后使用其中的方法,需要的朋友可以參考下
    2015-10-10
  • Golang中可比較的數(shù)據(jù)類型詳解

    Golang中可比較的數(shù)據(jù)類型詳解

    在日常開發(fā)中,比較操作是最常用的基本操作之一,可以用來判斷變量之間是否相等或者對(duì)應(yīng)的大小關(guān)系,本文將深入解析 Golang 中可比較的數(shù)據(jù)類型,并結(jié)合代碼示例來說明如何在不同情況下進(jìn)行比較,需要的朋友可以參考下
    2024-01-01
  • 自己動(dòng)手用Golang實(shí)現(xiàn)約瑟夫環(huán)算法的示例

    自己動(dòng)手用Golang實(shí)現(xiàn)約瑟夫環(huán)算法的示例

    這篇文章主要介紹了自己動(dòng)手用Golang實(shí)現(xiàn)約瑟夫環(huán)算法的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Go語(yǔ)言七篇入門教程四通道及Goroutine

    Go語(yǔ)言七篇入門教程四通道及Goroutine

    這篇文章主要為大家介紹了Go語(yǔ)言的通道及Goroutine示例詳解,本文是Go語(yǔ)言七篇入門系列篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Golang中interface是引用類型的原因解析

    Golang中interface是引用類型的原因解析

    在Go語(yǔ)言中,將interface設(shè)計(jì)為引用類型是為了實(shí)現(xiàn)更靈活、更動(dòng)態(tài)的類型系統(tǒng),這篇文章主要介紹了深度解析Golang中為什么interface是引用類型,需要的朋友可以參考下
    2024-01-01

最新評(píng)論