在查看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)
}
我认为这是一些允许您轻松导出本地函数的语法。那是对的吗?为什么要这样做而不是只有一个导出的函数并在包中使用它?
答案 0 :(得分:18)
函数声明可以省略正文。这样的声明为Go外部实现的函数提供了签名,例如汇编例程。
在这种情况下,Ceil
函数由floor_386.s
中386的体系结构特定的程序集文件实现。 amd64和arm架构都有一个实现Ceil()
的汇编文件,但这些汇编文件只是调用未导出的ceil()
函数的粘合剂。