더북(TheBook)

7.1.3 운영체제에 종속적인 코드 처리

운영체제에 따라 코드가 다를 때는 다음과 같은 방식으로 처리할 수 있다.

1. runtime.GOOS로 운영체제를 확인한 후 분기 처리

runtime.GOOS runtime 패키지에 정의되어 있는 상수이고 운영체제를 확인할 때 사용한다. 운영체제에 따라 darwin, freebsd, linux, windows를 반환하며 이 값으로 분기 처리를 한다.

2. 운영체제별로 .go 파일을 분리

패키지 안에 main.go, util_linux.go, util_windows.go 파일이 있을 때 리눅스에서 빌드하면 util_windows.go 파일은 무시된다. 마찬가지로 윈도에서 빌드하면 util_linux.go 파일은 무시된다. OS X나 FreeBSD에서도 마찬가지로 파일 이름을 util_darwin.go 또는 util_freebsd.go로 만들면 된다. 리눅스와 OS X는 대부분 처리 방식이 유사하므로 util_linux.go 파일의 심볼링 링크로 util_darwin.go 파일을 만들면 된다.

 

▼ main.go

package main
 
func main() {
    showOS()
}

▼ util_darwin.go

package main
 
import (
    "fmt"
    "runtime"
)
 
func showOS() {
    fmt.Println("현재 파일: util_darwin.go")
    fmt.Println(runtime.GOOS)
}

▼ util_linux.go

package main
 
import (
    "fmt"
    "runtime"
)
 
func showOS() {
    fmt.Println("현재 파일: util_linux.go")
    fmt.Println(runtime.GOOS)
}

다음은 OS X에서 실행한 결과다.

명령 프롬프트

$ uname # 운영체제 종류 확인

Darwin

 

$ go build

 

$./ostest

현재 파일: util_darwin.go

darwin

다음은 리눅스에서 실행한 결과다.

명령 프롬프트

$ uname # 운영체제 종류 확인

Linux

 

$ go build

 

$./ostest

현재 파일: util_linux.go

linux

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.