Function 戈朗的无体功能

Function 戈朗的无体功能,function,go,Function,Go,在阅读的源代码中,我阅读了如下代码: func Floor(x float64) float64 func floor(x float64) float64 { if x == 0 || IsNaN(x) || IsInf(x, 0) { return x } if x < 0 { d, fract := Modf(-x) if fract != 0.0 { d = d + 1

在阅读的源代码中,我阅读了如下代码:

func Floor(x float64) float64

func floor(x float64) float64 {
    if x == 0 || IsNaN(x) || IsInf(x, 0) {
        return x
    }
    if x < 0 {
        d, fract := Modf(-x)
        if fract != 0.0 {
            d = d + 1
        }
        return -d
    }
    d, _ := Modf(x)
    return d
}
func Floor(x float64)float64
功能楼层(x浮动64)浮动64{
如果x==0 | | IsNaN(x)| | IsInf(x,0){
返回x
}
如果x<0{
d、 分形:=Modf(-x)
如果分形!=0.0{
d=d+1
}
返回-d
}
d、 _u:=Modf(x)
返回d
}

似乎
func楼层
没有主体。我试图将这些代码复制并粘贴到我的go文件中。它不能编译。错误消息是
缺少函数体
。所以我的问题是:在Go的语法中,无体函数合法吗?谢谢。

这是函数在汇编中的实现方式。您可以在
floor_ARCH.s
(例如:)文件中找到部件实现

引述:

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

在我的例子中,我有“../../../pkg/mod/golang.org/x”/tools@v0.0.0-20190814235402-ea4142463bf3/go/ssa/INTP/testdata/src/fmt/fmt.go:3:6:
缺少函数体
“错误

这是因为我没有导入fmt,所以我的IDE导入了错误的包

我通过删除导入来修复它(
golang.org/x/tools/go/ssa/interp/testdata/src/fmt


只需导入
fmt

那么
floor(x…
(小写)功能实现的含义是什么?它与程序集实现有什么关系?@maerics我认为这是一种回退式的实现,例如由。这样的事情也可以作为参考,或者在测试中使用,以检查其他实现。(Go本身并不意味着
Floor
Floor
标识符之间存在任何关系)。@DaveC感谢您的报价。我把它添加到了答案中。谢谢,这解决了我的问题。