Golang中的脱胎功能

时间:2015-03-26 17:32:07

标签: function go

阅读math/floor.go, starting from line 13的源代码,我读了一些这样的代码:

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没有身体。我试图在go文件中复制并粘贴这些代码。它没有编译。错误消息为missing function body。所以我的问题是:在Go的语法中,脱胎功能是否合法?感谢。

2 个答案:

答案 0 :(得分:12)

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

引用spec

  

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

答案 1 :(得分:0)

就我而言,我有“ ../../../pkg/mod/golang.org/x/tools@v0.0.0-20190814235402-ea4142463bf3/go/ssa/interp/testdata/src/fmt/ fmt.go:3:6:缺少函数体”错误!

那是因为我没有导入就使用了fmt,所以我的IDE导入了错误的包

我通过删除fmt导入并仅导入“ fmt”来解决了该问题