好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > golang官方嵌入文件到可執(zhí)行程序的示例詳解

golang官方嵌入文件到可執(zhí)行程序的示例詳解

熱門標(biāo)簽:宿遷便宜外呼系統(tǒng)代理商 鄭州智能語音電銷機(jī)器人價(jià)格 仙桃400電話辦理 寧波語音外呼系統(tǒng)公司 不封卡外呼系統(tǒng) 上海極信防封電銷卡價(jià)格 湛江crm外呼系統(tǒng)排名 重慶慶云企業(yè)400電話到哪申請 地圖標(biāo)注免費(fèi)定制店

前言

在go官方出嵌入文件的方法前我在網(wǎng)上找過,并且自己還研究過,雖然沒有問題,但是既然官方支持還是用起來吧。
看了下go源碼embed/embed.go很簡單,并且看embed/internal/embedtest/embed_test.go就知道如何使用。

示例程序

嵌入文件直接訪問

原理是使用go:embed標(biāo)簽來完成。下面是直接讀取文件內(nèi)容,需要注意下面幾點(diǎn)。
文件不是utf8編碼時(shí),輸出內(nèi)容為中文會亂碼。
測試過嵌入文件只能為源碼文件同級目錄和子目錄下的文件,試過其他目錄的絕對路徑或相對路徑會報(bào)錯。
我測試過幾個能想到的場景,有些會報(bào)錯,所以在使用時(shí)需要注意。

package main
 
import (
  _ "embed"
)
 
//go:embed test.txt
var testString string // 當(dāng)前目錄,解析為string類型
 
//go:embed test.txt
var testByte []byte // 當(dāng)前目錄,解析為[]byte類型
 
//go:embed test/test.txt
var testAbsolutePath string // 子目錄,解析為string類型
 
//go:embed notExistsFile
var testErr0 string // 文件不存在,編譯報(bào)錯:pattern notExistsFile: no matching files found
 
//go:embed dir
var testErr1 string // dir是目錄,編譯報(bào)錯:pattern dir: cannot embed directory dir: contains no embeddable files
 
//go:embed ../test.txt
var testErr2 string // 相對路徑,不是當(dāng)前目錄或子目錄,編譯報(bào)錯:pattern ../test.txt: invalid pattern syntax
 
//go:embed D:\test.txt
var testErr3 string // 絕對路徑,編譯報(bào)錯:pattern D:\test.txt: no matching files found
 
func main() {
  println(testString)
  println(string(testByte))
  println(testAbsolutePath)
}

嵌入文件列表

package main
 
import (
  "embed"
  "io"
  "os"
)
 
//go:embed test0.txt test1.txt test1*.txt
//go:embed test/test0.txt test/test1.txt
//go:embed test0
var fileList embed.FS
/*
使用上述方法可以將多個文件或目錄添加到fileList中。
1. 添加多個文件,且支持"*"號通配文件。
2. 支持子目錄文件。
3. 支持嵌入一個目錄。
*/
 
func main() {
  testDir, err := fileList.ReadDir("test0")
  if err != nil {
    panic(err)
  }
  for _, v := range testDir {
    println(v.Name()) // 打印嵌入的目錄內(nèi)容
  }
 
  // 使用fileList.Open可以生成一個對象,可以通過文件流那樣讀出來
  testFile, err := fileList.Open("test0.txt")
  if err != nil {
    panic(err)
  }
  io.Copy(os.Stdout, testFile)
 
  testFile, err = fileList.Open("test112.txt")
  if err != nil {
    panic(err)
  }
  io.Copy(os.Stdout, testFile)
 
  testFile, err = fileList.Open("test/test1.txt")
  if err != nil {
    panic(err)
  }
  io.Copy(os.Stdout, testFile)
 
  // 直接將文件內(nèi)容讀出來
  data, err := fileList.ReadFile("test111.txt")
  if err != nil {
    panic(err)
  }
  println(string(data))
}

總結(jié)

今天看到go1.16發(fā)布,看了下特性,支持嵌入文件到可執(zhí)行程序中,所以研究了一下。
我發(fā)現(xiàn)直接看源碼的_test測試文件就知道是如何使用的,都不需要到處搜教程。
所以說學(xué)習(xí)要知其然且知其所以然,不然天天搜別人的示例代碼,卻不知道原理,是不能靈活使用的。

到此這篇關(guān)于golang官方嵌入文件到可執(zhí)行程序的文章就介紹到這了,更多相關(guān)golang嵌入文件到可執(zhí)行程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Go語言中嵌入C語言的方法
  • Go語言中的方法、接口和嵌入類型詳解

標(biāo)簽:儋州 西雙版納 青海 海南 遼寧 安康 物業(yè)服務(wù) 電子產(chǎn)品

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang官方嵌入文件到可執(zhí)行程序的示例詳解》,本文關(guān)鍵詞  golang,官方,嵌入,文件,到,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang官方嵌入文件到可執(zhí)行程序的示例詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang官方嵌入文件到可執(zhí)行程序的示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 国产动漫必看30部| 积积对积积的桶免费软件app| 国产va免费精品观看精品| 久久精品国产亚洲AV无码84| 99热久久精里都是精品6的特点| 女学生4三级在线播放| 天天操天天射天天舔| 欧美freesex极品少妇| 无遮挡1000部免费视频| 小男生喷出精子视频| 沙坪坝区| 好大好快| 欧美做爰全过程免费观看| 《性调教》在线观看| 十大污软件免费| 亚洲国产欧美在线看片XXOO| 强行按在桌上糟蹋进入小说| 最新理伦| 一级毛片直播| 啪啪网址免费网址| 波多野结衣中文字幕丝袜| 91久久精品国产性色也91久久| 在线一区国产| 日本亚洲欧美国产日韩ay高清| 曹查理三级全部电影| 国产成人一区二区三区影院| 羞羞漫画汗汗漫画成人漫画| 小小诊所寻情记在线观看| 两个人免费视频| 掀开奶罩边躁狠狠躁学生A片| 胬肉(产乳)金银花原文| 伊人五月婷| 浪荡受宿舍猛c太深了男男| 乳色吐息在线播放| 精品国产91久久久久久浪潮| 杨思敏被揉到高潮下不了床| 佐藤遥希在线播放一二区| 欧美乱妇18p| 国产51精品秘?入口豆花| AV淘宝在线观看| 日本护士性生活|