Глобальное назначение переменной inline с объединенным оператором декларации/присваивания и другой необъявленной переменной, теряющей область?
Эта программа Go не будет компилироваться. Он выдает ошибку global_var declared and not used
package main
import "log"
var global_var int
func main() {
global_var, new_string := returnTwoVars()
log.Println("new_string: " + new_string)
}
func returnTwoVars() (int, string) {
return 1234, "woohoo"
}
func usesGlobalVar() int {
return global_var * 2
}
Однако, когда я удаляю необходимость использования оператора :=
, объявляя new_string
в основной функции и просто используя =
, компилятор не имеет проблемы с тем, что global_var
объявлен глобально и используется в других местах программы. Моя интуиция подсказывает мне, что он должен знать, что global_var
уже объявлен
Ответы
Ответ 1
Компилятор не жалуется на global_var
внешний main. Он только жалуется на вновь созданный global_var
в основном, который вы не используете. Который вы можете проверить, посмотрев номер строки, указанный go
.
Вы можете попробовать пустую программу с global_var
вне любой функции, которую никто не ссылается: никаких проблем нет. И, конечно, функция usesGlobalVar
, которая ссылается на фактический глобальный символ, не имеет ничего общего с тем, который вы создаете в main
.