Из моего чтения спецификации:
Краткое объявление переменной... является сокращением для регулярной переменной декларация с выражениями инициализатора, но без типов...
Я бы подумал, что они были одинаковыми:
var f func()
f = func() {
...
}
и
f := func() {
...
}
Но похоже, что это не так. Я пытался обернуть саморекурсивную функцию внутри внешней функции, но это работает:
func myOuter() {
var f func()
f = func() {
f()
}
f()
}
Но это не означает, что undefined: f
во внутренней функции.
func myOuter() {
f := func() {
f()
}
f()
}
Так в чем же разница? Есть ли способ написать это с помощью короткой декларации или мне нужно написать ее долго?