Function Golang中的函数声明
在Golang中声明函数似乎有两种不同的方式,如下所示:Function Golang中的函数声明,function,go,Function,Go,在Golang中声明函数似乎有两种不同的方式,如下所示: package main import "fmt" var someFunc = func(arg string) { fmt.Println(arg) } func main() { someFunc("Hello") } somefunc := func(arg string) {} 以上工作。但是,以下方法不起作用: package main import "fmt" var someFunc = func(ar
package main
import "fmt"
var someFunc = func(arg string) {
fmt.Println(arg)
}
func main() {
someFunc("Hello")
}
somefunc := func(arg string) {}
以上工作。但是,以下方法不起作用:
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()
这样的函数。在这两者中,我们能说哪一个比另一个更正确吗
func main() {
这是在声明一个名为main
的函数
var main = func() {
这是声明一个匿名函数并将其分配给名为main的变量。函数是Go中的一流数据。您可以将函数本身分配给变量。当您这样做时
var someFunc = func(arg string) {}
您正在为somefunc
变量分配一个匿名函数。你也可以这样写:
package main
import "fmt"
var someFunc = func(arg string) {
fmt.Println(arg)
}
func main() {
someFunc("Hello")
}
somefunc := func(arg string) {}
创建函数的另一种方法是创建命名函数:
func somefunc(arg string) {}
命名函数只能在顶层声明,而匿名函数可以在任何地方声明。而main
有一个特殊的含义,在main
包中必须有一个名为main
的命名函数,这就是第二种情况下出现错误的原因。这是一个错误
这是一个
报告说:
“主程序包必须具有程序包名称main并声明函数
不接受参数且不返回值的main。“
变量声明不是函数声明,因此不符合main的要求。这是抱怨,因为所有函数都必须在作为程序起点的main函数内调用 例:
func-somefunc(arg-string){}
是否有效地创建了somefunc
变量?如果是这种情况,它们之间是否有显著差异?不,它不会创建一个变量,因此它们是不同的。但我可以用两种方式执行fmt.Println(someFunc)
。它们都打印出函数的内存地址。调用可以作为变量传递给fmt.Println的东西在技术上是否不正确?以下是规范中关于和的内容。它们是不同的,但区别很小,因为函数是Go中的一级数据。您可以在运行时将不同的函数分配给var f=func(){}
,但不能分配给func f(){}
。这意味着编译器可以在编译时内联func f()?如果是这种情况,它们之间是否存在显著差异?否。在第一种情况下,尝试将其他内容分配给main
将是错误的。在第二种情况下可以。
package main
import "fmt"
func Print() {
fmt.Println("Print function")
}
func main() {
Print()
}