温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用golang怎么将文件嵌入到可执行程序

发布时间:2021-02-20 13:48:01 来源:亿速云 阅读:393 作者:Leah 栏目:开发技术

今天就跟大家聊聊有关使用golang怎么将文件嵌入到可执行程序,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

嵌入文件直接访问

原理是使用go:embed标签来完成。下面是直接读取文件内容,需要注意下面几点。
文件不是utf8编码时,输出内容为中文会乱码。
测试过嵌入文件只能为源码文件同级目录和子目录下的文件,试过其他目录的绝对路径或相对路径会报错。
我测试过几个能想到的场景,有些会报错,所以在使用时需要注意。

package main
 
import (
  _ "embed"
)
 
//go:embed test.txt
var testString string // 当前目录,解析为string类型
 
//go:embed test.txt
var testByte []byte // 当前目录,解析为[]byte类型
 
//go:embed test/test.txt
var testAbsolutePath string // 子目录,解析为string类型
 
//go:embed notExistsFile
var testErr0 string // 文件不存在,编译报错:pattern notExistsFile: no matching files found
 
//go:embed dir
var testErr1 string // dir是目录,编译报错:pattern dir: cannot embed directory dir: contains no embeddable files
 
//go:embed ../test.txt
var testErr2 string // 相对路径,不是当前目录或子目录,编译报错:pattern ../test.txt: invalid pattern syntax
 
//go:embed D:\test.txt
var testErr3 string // 绝对路径,编译报错: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()) // 打印嵌入的目录内容
  }
 
  // 使用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)
 
  // 直接将文件内容读出来
  data, err := fileList.ReadFile("test111.txt")
  if err != nil {
    panic(err)
  }
  println(string(data))
}

看完上述内容,你们对使用golang怎么将文件嵌入到可执行程序有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI