[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 패키지를 활용하면 멀티플랫폼 빌드의 복잡성을 간소화할 수 있으며, 다양한 플랫폼에서 사용할 수 있는 프로그램을 더 쉽게 제공할 수 있습니다.

자세한 내용은 공식 문서를 참고하세요.