Невозможно объявить функцию как переменную вне основной функции в golang - PullRequest
0 голосов
/ 27 марта 2020

Рабочий пример

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

}

Скомпилируйте Err следующим образом:

.\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

Ответы [ 2 ]

3 голосов
/ 27 марта 2020

В Go при объявлении переменных вне функций каждое объявление должно начинаться с ключевого слова (ie. 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))

}

Go Детская площадка

2 голосов
/ 27 марта 2020

Просто, golang не позволяет этого. Переменная, которая объявляет внешнюю функцию, должна содержать 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))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...