功能签名没有功能体

时间:2013-01-07 03:47:23

标签: go

在查看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)
}

我认为这是一些允许您轻松导出本地函数的语法。那是对的吗?为什么要这样做而不是只有一个导出的函数并在包中使用它?

1 个答案:

答案 0 :(得分:18)

根据Go language specification

  

函数声明可以省略正文。这样的声明为Go外部实现的函数提供了签名,例如汇编例程。

在这种情况下,Ceil函数由floor_386.s中386的体系结构特定的程序集文件实现。 amd64和arm架构都有一个实现Ceil()的汇编文件,但这些汇编文件只是调用未导出的ceil()函数的粘合剂。