본문 바로가기
Golang

golang - 실행파일을 포함해서 빌드하는 방법

by 올엠 2025. 1. 19.
반응형

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

 

반응형