program story

Go에서 OS / 플랫폼을 안정적으로 감지하는 방법

inputbox 2020. 11. 24. 07:58
반응형

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

반응형