ventajas sistemas sistema operativos operativo menuetos desventajas definicion caracteristicas aros operating-system go

operating-system - sistemas - sistema operativo aros caracteristicas



Cómo detectar confiablemente os/plataforma en Go (2)

Esto es lo que estoy usando actualmente, que creo que hace el trabajo, pero tiene que haber una mejor manera:

func isWindows() bool { return os.PathSeparator == ''//' && os.PathListSeparator == '';'' }

Como puede ver, en mi caso todo lo que necesito saber es cómo detectar ventanas, pero me gustaría saber la manera de detectar cualquier plataforma / sistema operativo.

Jugar:

http://play.golang.org/p/r4lYWDJDxL


Detección en tiempo de compilación

Si está haciendo esto para tener diferentes implementaciones según el sistema operativo, es más útil tener archivos separados con la implementación de esa característica y agregar etiquetas de compilación a cada uno de los archivos. Esto se usa en muchos lugares en la biblioteca estándar, por ejemplo, en el paquete os .

Estas llamadas ''restricciones de compilación'' o ''etiquetas de compilación'' se explican here .

Supongamos que tiene el PATH_SEPARATOR constante y desea que la plataforma dependa, usted haría dos archivos, uno para Windows y otro para el resto (unix):

/project/path_windows.go /project/path_unix.go

El código de estos archivos sería entonces:

path_windows.go

// +build windows package project const PATH_SEPARATOR = ''//'

path_unix.go

// +build !windows package project const PATH_SEPARATOR = ''/''

Ahora puede acceder a PATH_SEPARATOR en su código y hacerlo depender de la plataforma.

Detección en tiempo de ejecución

Si desea determinar el sistema operativo en tiempo de ejecución, use la variable runtime.GOOS :

if runtime.GOOS == "windows" { fmt.Println("Hello from Windows") }

Si bien esto se compila en el tiempo de ejecución y, por lo tanto, ignora el entorno, puede estar relativamente seguro de que el valor es correcto. La razón de esto es que cada plataforma que vale la pena distinguir necesita reconstruirse debido a los diferentes formatos ejecutables y, por lo tanto, tiene un nuevo valor GOOS .