Szukaj…


Wprowadzenie

Kompilacja warunkowa oparta na platformie jest dostępna w Go w dwóch postaciach, jedna z przyrostkami plików, a druga ze znacznikami kompilacji.

Składnia

  • Po „ // +build ” może podążać pojedyncza platforma lub lista
  • Platformę można cofnąć, poprzedzając ją ! znak
  • Lista oddzielonych spacjami platform jest ORedowana razem

Uwagi

Ostrzeżenia dotyczące tagów kompilacji:

  • Ograniczenie // +build musi być umieszczone na górze pliku, nawet przed klauzulą pakietu.
  • Musi nastąpić jeden pusty wiersz, aby oddzielić się od komentarzy do pakietu.
Lista prawidłowych platform zarówno dla znaczników kompilacji, jak i przyrostków plików
android
Darwin
ważka
freebsd
linux
netbsd
openbsd
plan9
solaris
Windows

Zobacz listę $GOOS na https://golang.org/doc/install/source#environment, aby uzyskać najbardziej aktualną listę platform.

Twórz tagi

// +build linux

package lib

var OnlyAccessibleInLinux int // Will only be compiled in Linux

Neguj platformę, umieszczając ! przed tym:

// +build !windows

package lib

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

Listę platform można określić, oddzielając je spacjami

// +build linux darwin plan9

package lib

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

Sufiks pliku

Jeśli lib_linux.go swój plik lib_linux.go , cała zawartość tego pliku zostanie skompilowana tylko w środowiskach Linux:

package lib

var OnlyCompiledInLinux string

Definiowanie osobnych zachowań na różnych platformach

Różne platformy mogą mieć osobne implementacje tej samej metody. Ten przykład ilustruje również, w jaki sposób można używać tagów kompilacji i sufiksów plików.

Plik 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow