반응형
Go 언어로 실행 파일을 빌드할 때, 특정 파일을 바이너리에 포함시킬 수 있다.
여기에서는 문자열 파일과 실행 파일 다루는 법에 대해서 간단히 정리해 본다.
핵심은 embed 를 통해서 사용하는 방식으로 embed 의 자세한 내용은, 아래 문서름 참고하기 바란다.
문자열 파일
package main
import (
"embed"
"fmt"
"io/fs"
)
//go:embed data.txt
var content embed.FS
func main() {
data, _ := fs.ReadFile(content, "data.txt")
fmt.Println(string(data))
}
실행파일
파일도 실행이 가능하다. 다만 실행을 위해서는 먼저 압축을 해제하듯이 임시경로에 파일을 해제한후 실행하는 방식이다.
package main
import (
"embed"
"io/fs"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
)
//go:embed example.exe
var embeddedExe embed.FS
func main() {
// 임시 디렉토리 생성
tempDir, err := ioutil.TempDir("", "example")
if err != nil {
panic(err)
}
defer os.RemoveAll(tempDir)
// 임시 파일 경로 생성
tempFile := filepath.Join(tempDir, "example.exe")
// 실행 파일을 임시 파일로 추출
data, err := fs.ReadFile(embeddedExe, "example.exe")
if err != nil {
panic(err)
}
if err := ioutil.WriteFile(tempFile, data, 0755); err != nil {
panic(err)
}
// 실행 파일 실행
cmd := exec.Command(tempFile)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
panic(err)
}
}
반응형