According to the Go reference there are two ways of declaring a variable
Variable_declarations (in the format of var count = 0
or var count int
)
and
Short_variable_declarations (in the format of count := 0
)
I found it's very confusing to decide which one to use.
The differences I know (till now) are that:
count := 0
format when in the scope of a function.count := 0
can be redeclared in a multi-variable short declaration.But they do behave the same as far as I know. And in the reference it also says:
It (the
count:=0
way) is shorthand for a regular variable declaration with initializer expressions but no types
My confusions are:
Basically we can declare variables in three different ways by using var, let and const keyword. Each keyword is used in some specific conditions. var: This keyword is used to declare variable globally. If you used this keyword to declare variable then the variable can accessible globally and changeable also.
In Go language variables are created in two different ways: Using var keyword: In Go language, variables are created using var keyword of a particular type, connected with name and provide its initial value. Important Points: In the above syntax, either type or = expression can be omitted, but not both.
The subtle difference between = and := is when = used in variable declarations. the above declaration creates a variable of a particular type, attaches a name to it, and sets its initial value. Either the type or the = expression can be omitted, but not both. Besides, := may appear only inside functions.
Multiple variables can be declared using a single statement. var name1, name2 type = initialvalue1, initialvalue2 is the syntax for multiple variable declaration. The type can be removed if the variables have an initial value.
The Variable declarations make it clear that variables are declared. The var
keyword is required, it is short and expresses what is done (at the file level everything excluding comments has to start with a keyword, e.g. package
, import
, const
, type
, var
, func
). Like any other block, variable declarations can be grouped like this:
var ( count int sum float64 )
You can't do that with Short variable declarations. Also you can use Variable declarations without specifying the initial value in which case each variable will have the zero value of its type. The Short variable declaration does not allow this, you have to specify the initial value.
One of Go's guiding design principle was to make the syntax clean. Many statements require or it is handy that they allow declaring local variables which will be only available in the body of the statement such as for
, if
, switch
etc. To make the syntax cleaner and shorter, Short variable declaration is justified in these cases and it is unambigous what they do.
for idx, value := range array { // Do something with index and value } if num := runtime.NumCPU(); num > 1 { fmt.Println("Multicore CPU, cores:", num) }
Another difference: Redeclaration
Quoting from the Language specification:
Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block with the same type, and at least one of the non-blank variables is new. As a consequence, redeclaration can only appear in a multi-variable short declaration. Redeclaration does not introduce a new variable; it just assigns a new value to the original.
This one is also handy. Suppose you want to do proper error handling, you can reuse an err
variable because most likely you only need it to check if there were any errors during the last function call:
var name = "myfile.txt" fi, err := os.Stat(name) // fi and err both first declared if err != nil { log.Fatal(err) } fmt.Println(name, fi.Size(), "bytes") data, err := ioutil.ReadFile(name) // data is new but err already exists // so just a new value is assigned to err if err != nil { log.Fatal(err) } // Do something with data
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With