Attualmente, per rappresentare una nuova riga nei programmi go, io uso \n
. Ad esempio:Qual è il modo più portabile/multipiattaforma per rappresentare una nuova riga in go/golang?
package main
import "fmt"
func main() {
fmt.Printf("%d is %s \n", 'U', string(85))
}
... produrrà 85 is U
seguito da un ritorno a capo.
Tuttavia, questo non sembra tutto ciò che è multipiattaforma. Guardando altre lingue, PHP rappresenta questo con una costante globale (PHP_EOL
). \n
è il modo giusto per rappresentare le newline in modo specifico multipiattaforma in go/golang?
E 'bene avere "\ n" per essere stampato direttamente ad alcuni di uscita flusso a causa della traduzione di nuova riga abilitata quando questo flusso di output non è binario. Questa è una proprietà della libreria di runtime C su cui si basa Go: converte automaticamente le terminazioni di linea in quelle utilizzate dalla piattaforma, quindi è sicuro usare solo "\ n" nel codice del programma. Questo funziona solo per i flussi non binari, e non sarà facile ottenere il separatore della linea della piattaforma (ad es. Come una stringa) usando solo il runtime C. –
@VladimirMatveev, sei sicuro che Go sia basato sul runtime C? Sembra che i suoi compilatori standard non dipendano dal runtime di C e producano binari collegati in modo statico che non dipendono nemmeno da nulla. – kostix
@kostix, sembra che tu abbia ragione. Guardare attraverso i meccanismi interni di Go I/O suggerisce che stanno usando POSIX 'open()' syscall su sistemi Unix e 'CreateFile' su sistemi Windows per aprire file. Il buffer fornito a 'os.File # Write' sembra essere inviato invariato direttamente alla funzione API' WriteFile' di Windows. Le funzioni API di Windows non eseguono conversioni di fine riga, quindi l'output conterrà solo LF nel caso in cui ci fosse solo LF nel sorgente. –