[go] go/build 패키지를 활용한 멀티플랫폼 빌드
Go 언어로 개발된 프로그램을 여러 플랫폼에서 실행할 수 있도록 하는 것은 중요한 과제입니다. go/build 패키지를 사용하면 간편하게 멀티플랫폼용 바이너리를 빌드할 수 있습니다.
go/build 패키지 소개
go/build
패키지는 Go 언어의 컴파일, 빌드 및 테스트 도구에 접근할 수 있는 함수와 데이터를 제공합니다. 이 패키지를 사용하면 현재 플랫폼과 운영 체제에 맞는 빌드를 수행할 수 있습니다.
go/build 패키지를 활용한 멀티플랫폼 빌드 예시
다음은 go/build
패키지를 사용하여 Windows 및 macOS에서 실행할 수 있는 바이너리를 빌드하는 간단한 예시입니다.
package main
import (
"fmt"
"go/build"
"log"
"os"
"os/exec"
"path/filepath"
)
func main() {
// 현재 디렉터리의 상위 디렉터리
parentDir := filepath.Dir(".")
buildContext := build.Default
// Windows용 바이너리 빌드
buildArgs := []string{"GOOS=windows", "GOARCH=amd64", "go", "build", "-o", filepath.Join(parentDir, "app_windows.exe")}
cmd := exec.Command(buildArgs[0], buildArgs[1:]...)
cmd.Env = append(os.Environ(), buildContext.BuildTags...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
log.Println("Building for Windows...")
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
// macOS용 바이너리 빌드
buildArgs = []string{"GOOS=darwin", "GOARCH=amd64", "go", "build", "-o", filepath.Join(parentDir, "app_macos")}
cmd = exec.Command(buildArgs[0], buildArgs[1:]...)
cmd.Env = append(os.Environ(), buildContext.BuildTags...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
log.Println("Building for macOS...")
err = cmd.Run()
if err != nil {
log.Fatal(err)
}
fmt.Println("Build successfully completed for Windows and macOS.")
}
위 예제에서는 go/build
패키지를 사용하여 Windows와 macOS 용으로 바이너리를 빌드하는 과정을 보여주고 있습니다.
go/build
패키지를 활용하면 멀티플랫폼 빌드의 복잡성을 간소화할 수 있으며, 다양한 플랫폼에서 사용할 수 있는 프로그램을 더 쉽게 제공할 수 있습니다.
자세한 내용은 공식 문서를 참고하세요.