似乎有两种不同的方式在Golang中声明一个函数,如下所示:
package main
import "fmt"
var someFunc = func(arg string) {
fmt.Println(arg)
}
func main() {
someFunc("Hello")
}
以上作品。但是,以下内容不起作用:
package main
import "fmt"
var someFunc = func(arg string) {
fmt.Println(arg)
}
var main = func() {
someFunc("Hello")
}
它会抱怨:
runtime.main: undefined: main.main
那么func someFunc()
和var someFunc = func()
之间有什么区别?
我发现这个的原因可能是因为我编写了很多Javascript代码。在Go中,我很少看到人们声明像var someFunc=func()
这样的函数。在这两个中,我们可以说哪一个比另一个更正确吗?
答案 0 :(得分:13)
当你这样做时
var someFunc = func(arg string) {}
您正在为somefunc
变量分配匿名函数。你也可以这样写:
somefunc := func(arg string) {}
创建函数的另一种方法是创建一个命名函数:
func somefunc(arg string) {}
命名函数只能在顶层声明,而匿名函数可以在任何地方声明。并且main
具有特殊含义,main
包中必须有一个名为main
的命名函数,这就是为什么在第二种情况下出现错误的原因。
答案 1 :(得分:4)
func main() {
这是声明一个名为main
的函数。
var main = func() {
这是声明一个匿名函数并将其分配给一个名为main的变量。函数是Go中的一流数据。您可以将函数本身分配给变量。
答案 2 :(得分:3)
func main() {}
var main = func() {}
"主程序包必须包名为main并声明一个函数 不带参数且不返回任何值的main。"
变量声明不是函数声明,因此不符合main的要求。
答案 3 :(得分:0)
这是抱怨,因为所有函数都必须在main函数内调用,这是程序的起点。
例如:
package main
import "fmt"
func Print() {
fmt.Println("Print function")
}
func main() {
Print()
}