Каков самый переносимый/кросс-платформенный способ представления новой строки в go/golang?
В настоящее время для представления новой строки в программах go я использую \n
. Например:
package main
import "fmt"
func main() {
fmt.Printf("%d is %s \n", 'U', string(85))
}
... даст 85 is U
, а затем новую строку.
Однако это не похоже на кросс-платформу. Глядя на другие языки, PHP представляет это с глобальной константой (PHP_EOL
). Является ли \n
правильным способом представления новых строк в кросс-платформенной форме в go/golang?
Ответы
Ответ 1
Мне стало интересно, поэтому я решил посмотреть, что именно делается fmt.Println
. http://golang.org/src/pkg/fmt/print.go
Если вы перейдете к самому дну, вы увидите if addnewline
, где \n
всегда используется. Я не могу с трудом говорить, если это самый "кросс-платформенный" способ сделать это, и раньше он был связан с linux, но тот, где он предназначен для std lib.
Я изначально собирался предлагать просто использовать fmt.Fprintln
, и это может быть все еще актуальным, как если бы текущая функция не была подходящей, ошибка могла быть подана, а затем код просто должен был быть скомпилирован с помощью последней инструментальной комбинации Go.
Ответ 2
Наличие ОС определяет, что символ новой строки происходит во многих контекстах, чтобы быть неправильным. То, что вы действительно хотите знать, - это то, что "записывающий" разделитель, и Go предполагает, что вы, как программист, должны это знать.
Даже если двоичный файл работает в Windows, он может потреблять файл из ОС Unix.
Конечные строки определяются тем, что источником файла или документа является строка, заканчивающаяся не операционной системой, в которой работает двоичный файл.