Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Global variable inline assignment with combined declaration/assignment operator and another undeclared variable losing scope?

Tags:

go

This Go program will not compile. It throws the error 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
}

However, when I remove the need for using the := operator by declaring new_string in the main function and simply using =, the compiler doesn't have a problem with seeing that global_var is declared globally and being used elsewhere in the program. My intuition tells me that it should know that global_var is declared already

like image 496
BlinkyTop Avatar asked May 08 '14 22:05

BlinkyTop


1 Answers

The compiler doesn't complain about the global_var outside main. It only complains about the newly created global_var in main that you don't use. Which you can check by looking at the line number that go mentions.

You can try an empty program with a global_var outside any function that nobody references: no problems there. And of course, the usesGlobalVar function that does reference the actual global symbol has nothing to do with the one you create in main.

like image 65
cnicutar Avatar answered Sep 18 '22 17:09

cnicutar