我正在浏览其网站上的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。如果有人可以向我解释此功能,那就太好了。我很想学习。
答案 0 :(得分:6)
这里没有什么特别的事情发生。 math.Sqrt2
是一个常数。您可以在docs的math
包中找到其他常量。
通常,go并没有任何“魔术”。因此,如果某些东西让人觉得不可思议,那么它很有可能只是一种误会。