Golang中的函数声明

时间:2014-05-29 02:56:38

标签: function go

似乎有两种不同的方式在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()这样的函数。在这两个中,我们可以说哪一个比另一个更正确吗?

4 个答案:

答案 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)

这是function declaration:

func main() {}

这是variable declaration:

var main = func() {}

language specification说:

  

"主程序包必须包名为main并声明一个函数   不带参数且不返回任何值的main。"

变量声明不是函数声明,因此不符合main的要求。

答案 3 :(得分:0)

这是抱怨,因为所有函数都必须在main函数内调用,这是程序的起点。

例如:

package main

import "fmt"

func Print() {

    fmt.Println("Print function")
}

func main() {

    Print()

}