【问题标题】:Function signature with no function body没有函数体的函数签名
【发布时间】:2013-01-07 03:47:23
【问题描述】:

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

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

【问题讨论】:

    标签: go


    【解决方案1】:

    根据Go language specification.

    函数声明可以省略主体。这样的声明为在 Go 之外实现的函数(例如汇编例程)提供了签名。

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

    【讨论】:

    • 这更有意义。非常感谢!
    猜你喜欢
    • 2019-06-16
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2021-05-16
    相关资源
    最近更新 更多