功能签名没有功能体

the*_*tem 14 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)
}
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*erg 19

根据Go语言规范.

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

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