15

メソッドのソースを表示するmath.Ceilと、本文のないエクスポートされた関数シグネチャと、実装を含む同じシグネチャのエクスポートされていないバージョンがある次の構文が見つかりました。

// Ceil returns the least integer value greater than or equal to x.
//
// Special cases are:
//  Ceil(±0) = ±0
//  Ceil(±Inf) = ±Inf
//  Ceil(NaN) = NaN
func Ceil(x float64) float64

func ceil(x float64) float64 {
    return -Floor(-x)
}

これは、ローカル関数を簡単にエクスポートできる構文だと思います。あれは正しいですか?そして、単一のエクスポートされた関数をパッケージ内で使用する代わりに、なぜこれを行うのでしょうか?

4

1 に答える 1

20

Go言語仕様によると。

関数宣言では本文を省略できます。このような宣言は、アセンブリルーチンなど、Goの外部で実装された関数のシグネチャを提供します。

この場合、Ceil関数は386のアーキテクチャ固有のアセンブリファイルによって実装されますfloor_386.s。amd64アーキテクチャとarmアーキテクチャの両方に、それぞれを実装するCeil()アセンブリファイルがありますが、これらのアセンブリファイルは、エクスポートされていない関数を呼び出すための接着剤にすぎませんceil()

于 2013-01-07T03:55:43.307 に答える