前言

在go官方出嵌入文件的方法前我在网上找过,并且自己还研究过,虽然没有问题,但是既然官方支持还是用起来吧。

看了下go源码embed/embed.go很简单,并且看embed/internal/embedtest/embed_test.go就知道如何使用。

示例程序

嵌入文件直接访问

原理是使用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 //