수색…


소개

플랫폼 기반 조건부 컴파일은 Go에 두 가지 형식으로 제공됩니다. 하나는 파일 접미사이고 다른 하나는 빌드 태그입니다.

통사론

  • " // +build "이후에는 단일 플랫폼 또는 목록을 따를 수 있습니다.
  • 선행하는대로 플랫폼을 되돌릴 수 있습니다 ! 기호
  • 공간으로 분리 된 플랫폼 목록은 함께 OR됩니다

비고

빌드 태그에 대한주의 사항 :

  • // +build 제약 조건은 package 절보다 먼저 파일의 맨 위에 위치해야합니다.
  • 패키지 주석과 분리하려면 빈 줄이 하나 있어야합니다.
빌드 태그와 파일 접미사 모두에 유효한 플랫폼 목록
기계적 인조 인간
다윈
잠자리
freebsd
리눅스
netbsd
openbsd
계획 9
솔라리스
창문들

가장 최신 플랫폼 목록은 https://golang.org/doc/install/source#environment의 $GOOS 목록을 참조 하십시오.

태그 작성

// +build linux

package lib

var OnlyAccessibleInLinux int // Will only be compiled in Linux

배치하여 플랫폼을 부정합니다 ! 그 전에 :

// +build !windows

package lib

var NotWindows int // Will be compiled in all platforms but not Windows

플랫폼 목록은 공백으로 구분하여 지정할 수 있습니다.

// +build linux darwin plan9

package lib

var SomeUnix int // Will be compiled in linux, darwin and plan9 but not on others

파일 접미사

lib_linux.go 파일의 이름을 지정하면 해당 파일의 모든 내용은 Linux 환경에서만 컴파일됩니다.

package lib

var OnlyCompiledInLinux string

다른 플랫폼에서 별도의 비헤이비어 정의

서로 다른 플랫폼은 동일한 메소드를 별도로 구현할 수 있습니다. 또한이 예제는 빌드 태그와 파일 접미사를 함께 사용할 수있는 방법을 보여줍니다.

main.go 파일 :

package main

import "fmt"

func main() {
    fmt.Println("Hello World from Conditional Compilation Doc!")
    printDetails()
}

details.go :

// +build !windows

package main

import "fmt"

func printDetails() {
    fmt.Println("Some specific details that cannot be found on Windows")
}

details_windows.go :

package main

import "fmt"

func printDetails() {
    fmt.Println("Windows specific details")
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow