golang - Build

아래 글은 golang을 공부할 목적으로 웹에서 본 글들을 정리한 것이다.

빌드

go build

-tags를 사용하여 Release/Debug를 바꾸기

디버깅/릴리스에서 기능을 바꾸고 싶은 경우 Build constrains를 사용하면 좋다.

Build Constrains는? Build constrains는 필요에 따라서 파일을 바꾸는 Go의 기능이다.
공식 문서에 소개되고 있는 예는 아키텍처마다 빌드할 소스를 바꾸는 방법이다.

빌드 할 파일을 바꾸는 방법은 아래 3개

  1. 코멘트로 전환 // +build linux
    이 주석을 파일의 선두에 써 두면 GOOS=linux의 경우만 빌드된다.
    i386 등의 GOARCH도 태그로 사용하는 것이 가능하다. 참고로 부정은 다음과 같이 기술한다.
    // +build !linux

  2. 파일 이름으로 전환
    파일 이름으로도 Build constrains를 할 수 있다.
    아래의 파일은 GOOS=windows, GOARCH=amd64 환경에서만 빌드된다.
    파일 이름으로 빌드 대상을 알 수 있기 때문에 개발자에게도 편하다.
    source_windows_amd64.go

  3. build -tags로 전환
    +build 후에 붙이는 심불은 태그로 불리며 go build -tags tagA 처럼 옵션으로 지정할 수 있다.
    아래와 같이 주석이 있는 파일은 앞의 명령어에서만 빌드된다. // +build tagA

build -tags를 사용하여 Release/Debug 전환 3번째 방법을 쓰면 debug/release 빌드를 전환할 수 있다.
테스트 시는 localhost. 릴리스 때는 올바른 주소를 사용하고 싶은 경우 다음과 같이 2개의 파일을 기술한다.
release.go

// +build !debug

package main

const APIServer = "http://localhost:8080"

debug.go

// +build debug

package main

const APIServer = "http://www.mywebapp.com"

주의해야 할 것은 1행째 코멘트에 이어 3행째 사이에 빈 행이 필요하다.
그리고 debug 때는 아래와 같이 빌드한다.
go build -tags debug

정리

  • Build constrains를 사용하면 파일 단위로 빌드를 제어할 수 있다
  • go build -tags tagName 으로 원하는 태그를 지정할 수 있다
  • 태그는/ / +build 로 지정한다. 주석 뒤에 빈 행을 잊지 않도록

보충 1
참고로 방법 1, 2를 같이 적용할 필요는 없고 한쪽을 한다. 파일 이름으로 바꾸는 것을 선택한다면 grep 등으로 쉽게 빌드 대상 파일을 선별할 수 있으므로 추천한다.

보충 2
기본적으로 준비되어 있는 bc는 GOOS 나 GOARCH 이외에 ignore 가 있다.
// +build ignore
라고 쓰여진 파일은 빌드 되지 않는다.

xx_source.go 에러가 많은 파일 등을 우선 무시하고 싶을 때 위처럼 하면 좋다.

크로스 컴파일 설정 값 $GOOS, $GOARCH

$GOOS	$GOARCH		메모
darwin	386			Mac OS X 10.6~
darwin	amd64		Mac OS X 10.6~
freebsd	386
freebsd	amd64
freebsd	arm
linux	386
linux	amd64
linux	arm
netbsd	386
netbsd	amd64
netbsd	arm
openbsd	386
openbsd	amd64
plan9	386
plan9	amd64
windows	386
windows	amd64
$GOARCH		메모
amd64		64-bit x86
386			32-bit x86
arm			32-bit ARM

gox


이 글은 2018-09-28에 작성되었습니다.