国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go1.16 新特性:一文快速上手 Go embed

開(kāi)發(fā) 后端
在以前,很多從其他語(yǔ)言轉(zhuǎn)過(guò)來(lái) Go 語(yǔ)言的同學(xué)會(huì)問(wèn)到,或是踩到一個(gè)坑。就是以為 Go 語(yǔ)言所打包的二進(jìn)制文件中會(huì)包含配置文件的聯(lián)同編譯和打包。

[[379912]]

本文轉(zhuǎn)載自微信公眾號(hào)「腦子進(jìn)煎魚(yú)了」,作者陳煎魚(yú)。轉(zhuǎn)載本文請(qǐng)聯(lián)系腦子進(jìn)煎魚(yú)了公眾號(hào)。   

大家好,我是正在沉迷學(xué)習(xí)煎魚(yú)的煎魚(yú)。

在以前,很多從其他語(yǔ)言轉(zhuǎn)過(guò)來(lái) Go 語(yǔ)言的同學(xué)會(huì)問(wèn)到,或是踩到一個(gè)坑。就是以為 Go 語(yǔ)言所打包的二進(jìn)制文件中會(huì)包含配置文件的聯(lián)同編譯和打包。

結(jié)果往往一把二進(jìn)制文件挪來(lái)挪去,就無(wú)法把應(yīng)用程序運(yùn)行起來(lái)了。因?yàn)闊o(wú)法讀取到靜態(tài)文件的資源。

無(wú)法將靜態(tài)資源編譯打包進(jìn)二進(jìn)制文件的話(huà),通常會(huì)有兩種解決方法:

  • 第一種是識(shí)別這類(lèi)靜態(tài)資源,是否需要跟著程序走。
  • 第二種就是考慮將其打包進(jìn)二進(jìn)制文件中。

第二種情況的話(huà),Go 以前是不支持的,大家就會(huì)去借助各種花式的開(kāi)源庫(kù),例如:go-bindata/go-bindata 來(lái)實(shí)現(xiàn)。

但從在 Go1.16 起,Go 語(yǔ)言自身正式支持了該項(xiàng)特性,今天我們將通過(guò)這篇文章快速了解和學(xué)習(xí)這項(xiàng)特性。

基本使用

演示代碼:

  1. import _ "embed" 
  2.  
  3. //go:embed hello.txt 
  4. var s string 
  5.  
  6. func main() { 
  7.  print(s) 

我們首先在對(duì)應(yīng)的目錄下創(chuàng)建了 hello.txt 文件,并且寫(xiě)入文本內(nèi)容 “吃煎魚(yú)”。

在代碼中編寫(xiě)了最為核心的 //go:embed hello.txt 注解。注解的格式很簡(jiǎn)單,就是 go:embed 指令聲明,外加讀取的內(nèi)容的地址,可支持相對(duì)和絕對(duì)路徑。

輸出結(jié)果:

  1. 吃煎魚(yú) 

讀取到靜態(tài)文件中的內(nèi)容后自動(dòng)賦值給了變量 s,并且在主函數(shù)中成功輸出。

而針對(duì)其他的基礎(chǔ)類(lèi)型,Go embed 也是支持的:

  1. //go:embed hello.txt 
  2. var s string 
  3.  
  4. //go:embed hello.txt 
  5. var b []byte 
  6.  
  7. //go:embed hello.txt 
  8. var f embed.FS 
  9.  
  10. func main() { 
  11.  print(s) 
  12.  print(string(b)) 
  13.  
  14.  data, _ := f.ReadFile("hello.txt"
  15.  print(string(data)) 

輸出結(jié)果:

  1. 吃煎魚(yú) 
  2. 吃煎魚(yú) 
  3. 吃煎魚(yú) 

我們同時(shí)在一個(gè)代碼文件中進(jìn)行了多個(gè) embed 的注解聲明。

并且針對(duì) string、slice、byte、fs 等多種類(lèi)型進(jìn)行了打包,也不需要過(guò)多的處理,非常便利。

拓展用法

除去基本用法完,embed 本身在指令上也支持多種變形:

  1. //go:embed hello1.txt hello2.txt 
  2. var f embed.FS 
  3.  
  4. func main() { 
  5.  data1, _ := f.ReadFile("hello1.txt"
  6.  fmt.Println(string(data1)) 
  7.  
  8.  data2, _ := f.ReadFile("hello2.txt"
  9.  fmt.Println(string(data2)) 

在指定 go:embed 注解時(shí)可以一次性多個(gè)文件來(lái)讀取,并且也可以一個(gè)變量多行注解:

  1. //go:embed hello1.txt  
  2. //go:embed hello2.txt 
  3. var f embed.FS 

也可以通過(guò)在注解中指定目錄 helloworld,再對(duì)應(yīng)讀取文件:

  1. //go:embed helloworld 
  2. var f embed.FS 
  3.  
  4. func main() { 
  5.  data1, _ := f.ReadFile("helloworld/hello1.txt"
  6.  fmt.Println(string(data1)) 
  7.  
  8.  data2, _ := f.ReadFile("helloworld/hello2.txt"
  9.  fmt.Println(string(data2)) 

同時(shí)既然能夠支持目錄讀取,也能支持貪婪模式的匹配:

  1. //go:embed helloworld/* 
  2. var f embed.FS 

可能會(huì)有小伙伴注意到,embed.FS 也能調(diào)各類(lèi)文件系統(tǒng)的接口,其實(shí)本質(zhì)是 embed.FS 實(shí)現(xiàn)了 io/fs 接口。

只讀屬性

在 embed 所提供的 FS 中,我們可以發(fā)現(xiàn)其都是打開(kāi)和只讀方法:

  1. type FS 
  2.     func (f FS) Open(name string) (fs.File, error) 
  3.     func (f FS) ReadDir(name string) ([]fs.DirEntry, error) 
  4.     func (f FS) ReadFile(name string) ([]byte, error) 

根據(jù)此也可以確定 embed 所打包進(jìn)二進(jìn)制文件的內(nèi)容只允許讀取,不允許變更。

更抽象來(lái)講就是在編譯期就確定了 embed 的內(nèi)容,在運(yùn)行時(shí)不允許修改,保證了一致性。

總結(jié)

  • 通過(guò) Go1.16 正式提供的 embed 特性,可以實(shí)現(xiàn)原生就支持靜態(tài)資源文件的嵌入。整體如下:
  • 在功能上:能夠?qū)㈧o態(tài)資源嵌入二進(jìn)制文件中,在運(yùn)行時(shí)可以打開(kāi)和讀取相關(guān)的打包后的靜態(tài)文件。
  • 在安全上:是在編譯期編譯嵌入,在運(yùn)行時(shí)不支持修改。
  • 在使用上:
    • 支持單文件讀取:go:embed hello.txt。
    • 支持多文件讀取:go:embed hello1.txt、go:embed hello2.txt。
    • 支持目錄讀取:go:embed helloworld。
    • 支持貪婪匹配:go:embed helloworld/*。

總的來(lái)講,Go1.16 embed 特性很好的填補(bǔ)了 Go 語(yǔ)言在打包靜態(tài)文件資源的一塊原生空白領(lǐng)域。同時(shí)也說(shuō)明了 Go 官方的確在不斷地吸收社區(qū)的一些良好的想法和經(jīng)驗(yàn)。

 

責(zé)任編輯:武曉燕 來(lái)源: 腦子進(jìn)煎魚(yú)了
相關(guān)推薦

2021-02-19 09:01:37

Go項(xiàng)目模塊

2021-06-01 19:11:20

Go函數(shù)NotifyConte

2021-04-16 20:47:42

Go 指令函數(shù)

2020-11-27 09:40:53

Rollup前端代碼

2021-09-05 18:25:30

Go命令倉(cāng)庫(kù)

2024-04-26 00:01:00

Go語(yǔ)言類(lèi)型

2023-01-09 08:14:08

GoHttpServer

2023-04-26 08:43:28

GoCGO語(yǔ)言

2024-11-08 08:37:25

2022-08-30 22:12:19

Nacos組件服務(wù)注冊(cè)

2024-01-22 00:30:00

Go編程Go 1.22

2023-03-14 09:03:20

Go語(yǔ)法腳本

2022-11-09 09:15:31

ProtoBufGo語(yǔ)言

2021-11-01 20:17:07

Go項(xiàng)目目錄

2021-12-20 07:59:07

Go語(yǔ)言結(jié)構(gòu)體

2021-09-27 07:39:52

Go初始化函數(shù)package

2025-06-12 09:02:32

2023-11-25 09:41:34

GogRPCHandler

2024-02-21 08:33:27

GoReadDir性能

2020-11-24 13:05:35

Go語(yǔ)言泛型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲日本无吗高清不卡| 色吊丝在线永久观看最新版本| 日韩美女毛片| 北条麻妃久久精品| 美女视频在线免费| 欧美精品日日鲁夜夜添| 久草福利资源在线视频| 国产拍揄自揄精品视频麻豆 | 国产三级在线播放| 欧美色播在线播放| av超碰在线| 亚洲综合999| 爱草在线视频| 亚洲精品国产成人久久av盗摄| 国产三级三级三级看三级| 26uuu亚洲综合色欧美 | 在线小视频网址| 亚洲精品福利视频网站| 亚洲欧美视频二区| 欧美国产日韩a欧美在线观看 | 国内揄拍国内精品久久| 成人网在线观看| 欧美电影免费播放| 91精品天堂| 亚洲麻豆av| 女同一区二区| 激情欧美一区二区| 男人添女荫道口喷水视频| 国产69精品久久777的优势| 欧美日韩dvd| 波多野结衣中文一区| 黄色动漫在线免费看| 久久精品人人做人人爽人人| 天天色综合天天色| 亚洲第一在线综合网站| 国产永久免费高清在线观看视频| 91福利社在线观看| 自由的xxxx在线视频| 亚洲精品国偷自产在线99热| 免费观看成人性生生活片| 精品国产一区二区三区四区在线观看| 欧美激情精品| 国产精品日韩电影| 在线综合视频| 欧美中日韩在线| 国产精品欧美一级免费| 青青国产在线| 日韩成人中文字幕在线观看| 国产色99精品9i| 国产精品久久久爽爽爽麻豆色哟哟| 天天干天天操天天玩| 天堂蜜桃一区二区三区| 熟女视频一区二区三区| 久久网站最新地址| 在线麻豆国产传媒1国产免费| 色偷偷成人一区二区三区91| 日本大片在线播放| 欧美日韩第一页| 综合一区在线| 欧美乱做爰xxxⅹ久久久| 国产精品免费av| 天堂а√在线官网| 日韩在线视频观看| 一区二区三区网站| 国产xxxx振车| 欧美日韩国产在线| 精品亚洲美女网站| 国产精品久久久久久影视| 日本中文字幕一区二区视频| www.国产区| 欧美日韩精品免费观看视频| 九九久久国产| 国产精品视频一区二区三区经| 高清视频一区二区| 青青操视频在线| 亚洲一区第一页| 外国成人免费视频| 国产h视频在线播放| 色先锋久久av资源部| 九九九精品视频| 国产精品加勒比| 国产午夜精品久久久久久久 | 91免费看国产| 波多野结衣视频一区| 欧美日韩伦理片| 欧美黑人国产人伦爽爽爽| 国产亚洲精品v| 黄色av免费| 俺去了亚洲欧美日韩| 亚洲另类视频| 91佛爷在线| 中国日韩欧美久久久久久久久| 亚洲巨乳在线| 中文字幕在线第一页| 久久综合伊人77777| 日日夜夜免费精品| 理论在线观看| 欧美中文字幕在线视频| 99这里只有久久精品视频| 欧美黄色视屏| 九九九九精品九九九九| 婷婷六月综合亚洲| 欧美91在线| www黄色在线| 中文字幕无线精品亚洲乱码一区| 久久大逼视频| 成人在线观看免费| 成人亚洲欧美一区二区三区| 国产精品天干天干在观线| 欧美电影免费观看| 亚洲一二区在线| 欧美日韩国产系列| 我不卡伦不卡影院| 色偷偷免费视频| 欧美激情在线一区| 97aⅴ精品视频一二三区| 亚洲淫成人影院| 一级一片免费播放| 日韩电影中文字幕一区| 青青草一区二区三区| 1区2区在线观看| 日韩精品久久久| 精品久久久三级丝袜| 免费观看久久久4p| 高清精品在线| 亚洲区成人777777精品| 日韩精品免费在线观看| 狠狠色2019综合网| 免费福利视频一区二区三区| 无码人妻精品一区二区蜜桃百度| 亚洲精品一区二区网址| 国产成人精品aa毛片| 欧美xnxx| 成年人小视频网站| 热99在线视频| 午夜亚洲国产au精品一区二区| 99国产精品一区二区| 黄色大片在线看| 久久99欧美| 精品亚洲永久免费精品| hitomi一区二区三区精品| 国产精品毛片无码| 色琪琪原网站亚洲香蕉| 国产精品久久久久久久久久久不卡| 亚洲在线视频一区| 中文字幕一区二区三区欧美日韩| 国产女人在线观看| 日韩精品久久久| 国产亚洲成精品久久| 91麻豆文化传媒在线观看| 精品国产亚洲一区二区三区| 成人嫩草影院免费观看| 国产精品视频网址| 欧美曰成人黄网| 免费一级片91| 国产一区二区三区| 久草在线免费福利| 国产一区二区精品在线| 亚洲精品久久久久| 国产日韩av一区| 欧美激情aⅴ一区二区三区| 青青草原国产在线| 国产精品少妇在线视频| 91热精品视频| 亚洲精品国产免费| 亚洲国产岛国毛片在线| 99久久久久国产精品| 欧美野外wwwxxx| 超碰网在线观看| 91黄在线观看| 亚洲视频axxx| 亚洲自拍偷拍欧美| 日本伊人午夜精品| 黄色欧美网站| 免费的黄网站在线观看| 黄网站欧美内射| 日韩美女中文字幕| 精品成人一区二区| 成人欧美一区二区三区白人| 激情亚洲网站| 北岛玲精品视频在线观看| 在线观看午夜看亚太视频| 婷婷亚洲婷婷综合色香五月| 美女av一区二区三区| 欧美性猛交丰臀xxxxx网站| 久久成人免费日本黄色| 亚洲最大在线| 天堂在线中文网官网| 日本18视频网站| 国产欧美123| 99re在线播放| 久久99国产综合精品女同| 91福利视频久久久久| 成人激情文学综合网| 中文在线日韩| 日韩欧美三区| 91高清在线观看视频| 国产主播在线资源| 日韩精品视频在线观看视频| eeuss一区二区三区|