在Golang中无需使用括号进行函数调用

3

我正在学习Golang官网上的教程,对于类似下面这段简化并重现的代码感到困惑:

package main

import (
    "fmt"
    "math"
)

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

这在沙盒中打印出1.4142135623730951。用a := math.Sqrt(2)替换a := math.Sqrt2可以达到同样的效果,但我很困惑函数怎么没有括号就能被调用。这里的math.Sqrt不是一个函数指针(这里也没有math.Sqrt2函数),它是一个没有任何括号传递的函数。Go文档中的函数(链接)列出为:func Sqrt(x float64) float64,即带有参数。那么这是如何工作的呢?只是因为math.Sqrt()是一个简单的函数,Go可以假设它是一个float64而不需要传递括号吗?我是否遗漏了什么?
如果有帮助的话,我在教程中(链接)找到了这个现象,位于第14行。如果有人能向我解释这个特性,那就太棒了。我很想学习它。

10
math.Sqrt2 是一个常量,详情请参考 https://golang.org/pkg/math/#pkg-constants 和 https://golang.org/src/math/const.go。 - zerkms
啊,我明白了。谢谢! - Harpagornis
1个回答

9

这里没有什么特别的。 math.Sqrt2 是一个常量。你可以在文档中的math包中找到其他常量。

总的来说,Go语言并没有什么“魔法”。所以如果有什么感觉很神奇的东西,很可能只是一种误解。


明白了!我想得太多了!非常感谢! - Harpagornis
Go语言并没有什么“魔法”——除非它有:表达式可能会根据上下文而表现不同。例如:作为复合表达式的一部分与作为return(多值返回)的一部分。对我来说,这完全是违反直觉的魔法。 - zerkms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接