Go에서 OS / 플랫폼을 안정적으로 감지하는 방법
다음은 내가 현재 사용하고있는 작업이며, 작업을 완료한다고 생각하지만 더 나은 방법이 있습니다.
func isWindows() bool {
return os.PathSeparator == '\\' && os.PathListSeparator == ';'
}
보시다시피, 필자의 경우에는 창을 감지하는 방법 만 알 필요가 있지만 플랫폼 / OS를 감지하는 방법을 알고 싶습니다.
플레이:
http://play.golang.org/p/r4lYWDJDxL
컴파일 타임에 탐지
OS에 따라 다른 구현을하기 위해이 작업을 수행하는 경우 해당 기능을 구현 한 별도의 파일을 갖고 각 파일에 빌드 태그를 추가하는 것이 더 유용합니다. 이는 표준 라이브러리의 여러 위치 (예 : os패키지) 에서 사용 됩니다 .
소위 '빌드 제약'또는 '빌드 태그'는 여기 에 설명되어 있습니다 .
상수가 PATH_SEPARATOR있고 그 플랫폼에 의존하기를 원한다면 두 개의 파일을 만듭니다. 하나는 Windows 용이고 다른 하나는 (unix) 나머지 용입니다.
/project/path_windows.go
/project/path_unix.go
이러한 파일의 코드는 다음과 같습니다.
path_windows.go
// +build windows
package project
const PATH_SEPARATOR = '\\'
path_unix.go
// +build !windows
package project
const PATH_SEPARATOR = '/'
이제 PATH_SEPARATOR코드에서 액세스 할 수 있으며 플랫폼에 따라 다릅니다.
런타임시 감지
런타임에 운영 체제를 확인하려면 다음 runtime.GOOS변수를 사용하십시오 .
if runtime.GOOS == "windows" {
fmt.Println("Hello from Windows")
}
이것은 런타임으로 컴파일되므로 환경을 무시하지만 값이 올바른지 상대적으로 확신 할 수 있습니다. 그 이유는 구별할만한 가치가있는 모든 플랫폼은 실행 가능한 형식이 다르기 때문에 재 구축이 필요하므로 새로운 GOOS가치 가 있기 때문 입니다.
런타임 패키지를 보셨습니까? GOOS const : http://golang.org/pkg/runtime/#pkg-constants
참고 URL : https://stackoverflow.com/questions/19847594/how-to-reliably-detect-os-platform-in-go
'program story' 카테고리의 다른 글
| 파이썬에서 numpy를 사용하여 자연 로그 (예 : "ln ()")를 어떻게 수행합니까? (0) | 2020.11.24 |
|---|---|
| Java에서 이미 초기화 된 배열 목록에 여러 항목 추가 (0) | 2020.11.24 |
| 생성자 주입이 다른 옵션보다 나은 이유 설명 (0) | 2020.11.24 |
| Elixir에서 셸 명령 실행 (0) | 2020.11.24 |
| 작업자, 작업자 인스턴스 및 실행자 간의 관계는 무엇입니까? (0) | 2020.11.24 |