没有括号的Golang函数调用

时间:2018-11-14 22:14:30

标签: function go

我正在浏览其网站上的Golang教程,并为类似于我在此处简化和复制的代码所迷惑:

package main

import (
    "fmt"
    "math"
)

func main() {
    a := math.Sqrt2
    fmt.Println(a)
}

这会在沙箱中打印1.4142135623730951。用a := math.Sqrt2代替a := math.Sqrt(2)可以做到同样的事情,但是我很困惑如何在没有括号的情况下调用该函数。 math.Sqrt此处不是函数指针(无论如何都没有math.Sqrt2函数,它是一个不带任何括号的传递函数。Go文档here中的函数列为:{{1 }}即带有参数,那么它是如何工作的呢?仅仅是因为func Sqrt(x float64) float64是一个简单的函数,Go可以假设它是math.Sqrt(),而没有传递括号吗?我遗漏了什么吗?

如果有帮助,我最初在第14行的教程中发现了这种现象here。如果有人可以向我解释此功能,那就太好了。我很想学习。

1 个答案:

答案 0 :(得分:6)

这里没有什么特别的事情发生。 math.Sqrt2是一个常数。您可以在docsmath包中找到其他常量。

通常,go并没有任何“魔术”。因此,如果某些东西让人觉得不可思议,那么它很有可能只是一种误会。