Глобальное назначение переменной 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.