介绍
今天就跟大家聊聊有关使用golang怎么将文件嵌入到可执行程序,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
原理是使用<代码>:嵌入代码> 标签来完成。下面是直接读取文件内容,需要注意下面几点。
文件不是<代码> utf8> 代码编码时,输出内容为中文会乱码。
测试过嵌入文件只能为源码文件同级目录和子目录下的文件,试过其他目录的绝对路径或相对路径会报错。
我测试过几个能想到的场景,有些会报错,所以在使用时需要注意。
package 主要 , import ( _ 才能“embed" ) ,//:embed 用法//var testString  string 当前目录,解析为字符串类型 ,//:embed 用法 var testByte [] byte //,当前目录,解析为[]字节类型 ,//:embed 测试/用法//var testAbsolutePath  string 子目录,解析为字符串类型 ,//:embed notExistsFile//var testErr0  string 文件不存在,编译报错:pattern notExistsFile: no matching files 发现 ,//:embed dir var testErr1  string //, dir是目录、编译报错:pattern dir:, cannot embed directory dir: contains no embeddable 文件 ,//去:embed . ./用法//var testErr2  string 相对路径,不是当前目录或子目录、编译报错:pattern . ./用法:invalid pattern 语法 ,//:embed D: \用法//var testErr3  string 绝对路径,编译报错:pattern D: \用法:no matching files 发现 , func main (), { println (testString)才能 println才能(string (testByte)) println (testAbsolutePath)才能 }
嵌入文件列表
package 主要 , import ( “才能embed" “才能无力偿贷; “才能os" ) ,//去:embed test0.txt test1.txt  test1 * . txt//去:embed 测试/test0.txt 测试/test1.txt//:embed 电平 var fileList  embed.FS/* 使用上述方法可以将多个文件或目录添加到文件列表中。 1只添加多个文件,且支持“*”号通配文件。 2只支持子目录文件。 3只支持嵌入一个目录。 */, func main (), { ,,,err testDir:=, fileList.ReadDir (“test0") if 才能;err  !=, nil { ,,,恐慌(err) ,,} for 才能,_,v :=, range testDir { ,,,println (v.Name()),//,打印嵌入的目录内容 ,,} ,//,才能使用fileList.Open可以生成一个对象,可以通过文件流那样读出来 测试文件,才能,err :=, fileList.Open (“test0.txt") if 才能;err  !=, nil { ,,,恐慌(err) ,,} io.Copy才能(os.Stdout,测试文件) , 测试文件,才能,err =, fileList.Open (“test112.txt") if 才能;err  !=, nil { ,,,恐慌(err) ,,} io.Copy才能(os.Stdout,测试文件) , 测试文件,才能,err =, fileList.Open(“测试/test1.txt") if 才能;err  !=, nil { ,,,恐慌(err) ,,} io.Copy才能(os.Stdout,测试文件) ,//,才能直接将文件内容读出来 数据,才能,err :=, fileList.ReadFile (“test111.txt") if 才能;err  !=, nil { ,,,恐慌(err) ,,} println才能(字符串(数据)) }
看完上述内容,你们对使用golang怎么将文件嵌入到可执行程序有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。