#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))
}