42

現在、go プログラムで改行を表すために、私は\n. 例えば:

package main

import "fmt"


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

... 得85 is Uられ、その後に改行が続きます。

ただし、これはクロスプラットフォームではないようです。他の言語を見ると、PHP はこれをグローバル定数 ( PHP_EOL) で表します。\ngo/golangでクロスプラットフォーム固有の方法で改行を表す正しい方法はありますか?

4

3 に答える 3

26

私はこれに興味を持ったので、 によって正確に何が行われるかを見ることにしましたfmt.Printlnhttp://golang.org/src/pkg/fmt/print.go

一番下までスクロールすると、常に使用されるif addnewline場所が表示されます。\nこれが最も「クロスプラットフォーム」な方法であるかどうかについてはほとんど語れません.goは当初、Linuxに関連付けられていましたが、それはstd libの場合です.

私はもともと使用することを提案するつもりでしたがfmt.Fprintln、現在の機能が適切でないかのように、これはまだ有効である可能性があり、バグが報告され、コードを最新の Go ツールチェーンでコンパイルする必要があるだけです。

于 2013-01-24T04:50:45.880 に答える
17

改行文字が何であるかをOSに判断させることは、多くのコンテキストで間違っていることが起こります。あなたが本当に知りたいのは、「レコード」セパレーターが何であるかであり、Go は、プログラマーとしてそれを知っている必要があると想定しています。

バイナリが Windows で実行されている場合でも、Unix OS のファイルを使用している可能性があります。

行末は、バイナリが実行されている OS ではなく、ファイルまたはドキュメントのソースが行末であると述べたものによって決定されます。

于 2013-01-24T21:18:08.570 に答える