如何使用Go1.16的新特性

本篇內容介紹了“如何使用Go1.16的新特性”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

專注于為中小企業提供成都做網站、成都網站設計、成都外貿網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業九江免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了上千余家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。

無法將靜態資源編譯打包進二進制文件的話,通常會有兩種解決方法:

  • 第一種是識別這類靜態資源,是否需要跟著程序走。

  • 第二種就是考慮將其打包進二進制文件中。

第二種情況的話,Go 以前是不支持的,大家就會去借助各種花式的開源庫,例如:go-bindata/go-bindata 來實現。

但從在 Go1.16 起,Go 語言自身正式支持了該項特性,今天我們將通過這篇文章快速了解和學習這項特性。

基本使用

演示代碼:

import _ "embed"  //go:embed hello.txt var s string  func main() {  print(s) }

我們首先在對應的目錄下創建了 hello.txt 文件,并且寫入文本內容 “吃煎魚”。

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

輸出結果:

吃煎魚

讀取到靜態文件中的內容后自動賦值給了變量 s,并且在主函數中成功輸出。

而針對其他的基礎類型,Go embed 也是支持的:

//go:embed hello.txt var s string  //go:embed hello.txt var b []byte  //go:embed hello.txt var f embed.FS  func main() {  print(s)  print(string(b))   data, _ := f.ReadFile("hello.txt")  print(string(data)) }

輸出結果:

吃煎魚 吃煎魚 吃煎魚

我們同時在一個代碼文件中進行了多個 embed 的注解聲明。

并且針對 string、slice、byte、fs 等多種類型進行了打包,也不需要過多的處理,非常便利。

拓展用法

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

//go:embed hello1.txt hello2.txt var f embed.FS  func main() {  data1, _ := f.ReadFile("hello1.txt")  fmt.Println(string(data1))   data2, _ := f.ReadFile("hello2.txt")  fmt.Println(string(data2)) }

在指定 go:embed 注解時可以一次性多個文件來讀取,并且也可以一個變量多行注解:

//go:embed hello1.txt  //go:embed hello2.txt var f embed.FS

也可以通過在注解中指定目錄 helloworld,再對應讀取文件:

//go:embed helloworld var f embed.FS  func main() {  data1, _ := f.ReadFile("helloworld/hello1.txt")  fmt.Println(string(data1))   data2, _ := f.ReadFile("helloworld/hello2.txt")  fmt.Println(string(data2)) }

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

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

可能會有小伙伴注意到,embed.FS 也能調各類文件系統的接口,其實本質是 embed.FS 實現了 io/fs 接口。

只讀屬性

在 embed 所提供的 FS 中,我們可以發現其都是打開和只讀方法:

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

根據此也可以確定 embed 所打包進二進制文件的內容只允許讀取,不允許變更。

更抽象來講就是在編譯期就確定了 embed 的內容,在運行時不允許修改,保證了一致性。

“如何使用Go1.16的新特性”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!

當前標題:如何使用Go1.16的新特性
網頁路徑:http://m.kartarina.com/article26/jedecg.html

成都網站建設公司_創新互聯,為您提供虛擬主機建站公司微信公眾號App設計自適應網站ChatGPT

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名
主站蜘蛛池模板: 亚洲AV无码一区二区三区电影| 无码国内精品久久综合88| 国产精品白浆无码流出| 国产精品热久久无码av| 亚洲VA中文字幕无码一二三区| 亚洲精品无码久久毛片波多野吉衣| 免费无码又爽又刺激聊天APP| 精品久久久久久无码人妻蜜桃| 日韩乱码人妻无码中文字幕久久| 无码人妻啪啪一区二区| 国精品无码一区二区三区左线| 亚洲午夜无码毛片av久久京东热| 粉嫩高中生无码视频在线观看| 中文字幕无码精品亚洲资源网久久| mm1313亚洲精品无码又大又粗| 亚洲va无码手机在线电影| 亚洲av无码不卡私人影院| 玖玖资源站无码专区| 国产成人无码久久久精品一| mm1313亚洲国产精品无码试看| 无码性午夜视频在线观看| 国产在线观看无码免费视频 | 一夲道dvd高清无码| 三上悠亚ssⅰn939无码播放| 精品无码av无码专区| 亚洲aⅴ无码专区在线观看| 亚洲av无码一区二区三区天堂古代 | 亚洲精品无码专区在线| 亚洲av永久无码精品表情包| AV无码小缝喷白浆在线观看 | 亚洲AV综合色区无码一区爱AV| 无码人妻精品一区二区蜜桃AV| 人妻少妇精品无码专区动漫| 色综合无码AV网站| 国产成人无码AV在线播放无广告| 伊人久久大香线蕉无码| 无码日韩人妻av一区免费| 亚洲日韩看片无码电影| 亚洲AV永久无码精品一福利| 人妻少妇看A偷人无码精品视频| 无码熟熟妇丰满人妻啪啪软件|