正在工作的例子
package main
import "fmt"
func main() {
var newFunc func(int, int) int
newFunc = func(i int, j int) int {
return (i * j)
}
fmt.Println(newFunc(10, 20))
}
但是,如果我从主函数中取出函数声明部分(如下面所示),它将无法编译..是否必须在main()函数中声明它?
package main
import "fmt"
var newFunc func(int, int) int
newFunc = func(i int, j int) int {
return (i * j)
}
func main() {
fmt.Println(newFunc(10, 20))
}
编译错误的详细信息如下:
.\functionanonymous1.go:6:1: syntax error: non-declaration statement outside function body
.\functionanonymous1.go:6:15: missing function body
.\functionanonymous1.go:6:33: method has multiple receivers
.\functionanonymous1.go:7:2: syntax error: unexpected return, expecting )
.\functionanonymous1.go:8:1: syntax error: non-declaration statement outside function body
发布于 2020-03-27 04:29:11
在Go中,在声明函数之外的变量时,每个声明都必须以关键字(即。var
)。可能会以这种方式保存,这样解析就不会那么复杂了。
因此,在函数之外,您不能为某个预先声明的变量(即v = 1
)赋值,也不能使用短变量声明(即v := 1
)。您可能已经注意到,从错误日志,syntax error: non-declaration statement outside function body
。
package main
var a int
a = 1 // illegal
b := 1 // illegal
var c = 1 // legal
func main() {}
更新代码:
package main
import "fmt"
var newFunc = func(i int, j int) int {
return (i * j)
}
func main() {
fmt.Println(newFunc(10, 20))
}
发布于 2020-03-27 04:30:16
简单地说,歌朗不允许这样做。声明外部函数的变量必须包含var
。
所以你可以试着:
package main
import "fmt"
var newFunc func(int, int) int = func(i int, j int) int {
return (i * j)
}
func main() {
fmt.Println(newFunc(10, 20))
}
https://stackoverflow.com/questions/60879907
复制相似问题