cross-platform go newline portability

cross platform - ¿Cuál es la forma más portátil/multiplataforma de representar una nueva línea en go/golang?



cross-platform newline (3)

Actualmente, para representar una nueva línea en los programas go, uso /n . Por ejemplo:

package main import "fmt" func main() { fmt.Printf("%d is %s /n", ''U'', string(85)) }

... producirá 85 is U seguido de una nueva línea.

Sin embargo, esto no parece tan multiplataforma. En otros idiomas, PHP lo representa con una constante global ( PHP_EOL ). ¿Es /n la forma correcta de representar nuevas líneas de una manera específica multiplataforma en go / golang?


Hacer que el SO determine qué es lo que el carácter de nueva línea sucede en muchos contextos para estar equivocado. Lo que realmente quieres saber es qué es el separador de "registro" y Go asume que tú, como programador, debería saberlo.

Incluso si el binario se ejecuta en Windows, puede estar consumiendo un archivo de un sistema operativo Unix.

Los finales de línea están determinados por lo que la fuente del archivo o documento dijo que era una línea que no es el sistema operativo en el que se ejecuta el binario.


Siempre se puede usar un archivo específico del sistema operativo para declarar ciertas constantes. Al igual que los archivos _test.go solo se usan cuando se hace la go test , los _[os].go solo se incluyen cuando se construye en esa plataforma de destino.

Básicamente necesitarás agregar los siguientes archivos:

- main.go - main_darwin.go // Mac OSX - main_windows.go // Windows - main_linux.go // Linux

Puede declarar una constante de LineBreak en cada uno de los main_[os].go y tener su lógica en main.go

El contenido de tus archivos se vería así:

main_darwin.go

package somepkg const LineBreak = "/n"

main_linux.go

package somepkg const LineBreak = "/n"

main_windows.go

package somepkg const LineBreak = "/r/n"

y simplemente en su archivo main.go , escriba el código y consulte LineBreak

main.go

package main import "fmt" func main() { fmt.Printf("%d is %s %s", ''U'', string(85), LineBreak) }


fmt.Println curiosidad por esto, así que decidí ver qué hace exactamente fmt.Println . http://golang.org/src/pkg/fmt/print.go

Si se desplaza hasta la parte inferior, verá una línea de if addnewline siempre se usa /n . Casi no puedo hablar por si esta es la forma más "multiplataforma" de hacerlo, e ir estaba originalmente ligado a Linux en los primeros días, pero ahí es donde está la publicación estándar.

Originalmente, iba a sugerir el uso de fmt.Fprintln y esto podría seguir siendo válido, ya que si la funcionalidad actual no es apropiada, se podría presentar un error y el código simplemente debería compilarse con la última herramienta de herramientas Go.