#go 编译时候嵌入 变量或者文件 embed
2种方案 ldflags | //go:embed hello.txt
#1. ldflags
// go build -ldflags "-X 'main.Version=1.1.1'" // 设置变量. 只适合设置变量
长文件用base64转成字符串,也支持小的二进制。6000行没问题 1.8w行 报错build.sh: line 6: /opt/go/bin/go: Argument list too long
读取文件 时候
#! /bin/bash
content=`base64 < hello.txt > zzz`
flags="-X main.Name=`cat zzz`"
rm zzz
go build -ldflags "$flags" -o lmq main.go
# go build -ldflags "$flags" -x -o lmq main.go // -x 各种编译参数
内部转成原文件 存起来
func InitFile(content string) {
strarr, err := base64.StdEncoding.DecodeString(content)
if err != nil {
fmt.Println("decode base64 error ", err)
}
str = string(strarr)
}
#2. //go:embed hello.txt 更简洁
//go:embed hello.txt
var Name string
// 嵌入多个文件
//go:embed hello.txt
//go:embed hello2.txt
var f embed.FS
func main() {
data, _ := f.ReadFile("hello.txt") // 读取
fmt.Println(string(data))
data, _ = f.ReadFile("hello2.txt")
fmt.Println(string(data))
}