152

以下に示すように、 Go では と の両方fmt.Println()println()同じ出力が得られます。Hello world!

しかし:それらは互いにどのように違うのですか?

スニペット 1、fmtパッケージを使用。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello world!")
}

スニペット 2、fmtパッケージなし。

package main

func main() {
    println("Hello world!")
}
4

5 に答える 5

136

printlnfmtパッケージが標準ライブラリにある間は、最終的に削除される可能性がある (ランタイムへの) 組み込み関数であり、永続化されます。そのトピックの仕様を参照してください。

言語開発者にとっては、println依存関係のない があると便利ですが、その方法は、fmtパッケージまたは類似のもの (logたとえば) を使用することです。

実装でわかるように、関数print(ln)は別の出力モードをリモートでサポートするようにも設計されておらず、主にデバッグ ツールです。

于 2013-02-04T04:28:38.263 に答える
127

nemoの答えに基づいて構築するには:

println言語に組み込まれている関数です。これは、仕様のブートストラップ セクションにあります。リンクから:

現在の実装では、ブートストラップ中に役立つ組み込み関数がいくつか提供されています。これらの関数は完全を期すために文書化されていますが、言語にとどまる保証はありません。結果は返されません。

Function   Behavior

print      prints all arguments; formatting of arguments is implementation-specific
println    like print but prints spaces between arguments and a newline at the end

したがって、依存関係がない (コンパイラに組み込まれている) ため、開発者にとっては便利ですが、運用コードにはありません。また、 ではなくprintprintln 報告するstderrstdoutことも重要です。

ただし、によって提供されるファミリはfmt、製品コードで構築されています。stdout別段の指定がない限り、彼らは当然のように に報告します。それらはより用途が広く ( 、、または型などのfmt.Fprint*任意の にレポートできます)、実装固有ではありません。io.Writeros.Stdoutos.Stderrnet.Conn

出力を担当するほとんどのパッケージにはfmt、 などの依存関係がありlogます。あなたのプログラムが本番環境で何かを出力しようとしているなら、fmtそれはあなたが望むパッケージである可能性が最も高いです.

于 2013-02-04T04:51:26.450 に答える
-2

違いについては、これは一例です。

println()関数 test のアドレスへのポインター point を出力します。

fmt.Println()関数のアドレスを出力します。

于 2016-09-16T15:20:25.443 に答える