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에서 실행한 결과다.
다음은 리눅스에서 실행한 결과다.