Для хранения данных в программе применяются переменные. Переменная представляет именованный участок в памяти, который может хранить некоторое значение. Для определения переменной применяется ключевое слово var, после которого идет имя переменной, а затем указывается ее тип:
var имя_переменной тип_данных
Имя переменной представляет произвольный идентификатор, который состоит из алфавитных и цифровых символов и символа подчеркивания. При этом первым символом должен быть либо алфавитный символ, либо символ подчеркивания. При этом имена не должны представлять одно из ключевых слов: break, case, chan, const, continue, default, defer, else, fallthrough, for, func, go, goto, if, import, interface, map, package, range, return, select, struct, switch, type, var.
Например, простейшее определение переменной:
var hello string
Данная переменная называется hello и она представляет тип string, то есть некоторую строку.
Можно одновременно объявить сразу несколько переменных через запятую:
var a, b, c string
В данном случае определены переменные a, b, c, которые имеют тип string. В этом случае опять же в конце указывается тип данных, и все переменные принадлежат этому типу.
После определения переменной ей можно присвоить какое-либо значение, которое соответствует ее типу:
package main import "fmt" func main() { var hello string hello = "Hello world" fmt.Println(hello) }
Поскольку переменная hello представляет тип string, ей можно присвоить строку. В данном случае переменная hello хранит строку "Hello world". С помощью функции Println значение этой переменной выводится на консоль.
Также важно учитывать, что Go - регистрозависимый язык, то есть переменные с именами "hello" и "Hello" будут представлять разные переменные:
var hello string hello = "Hello world" fmt.Println(Hello) // ! Ошибка переменной Hello нет, есть переменная hello
Также можно сразу при объявлении переменной присвоить ей начальное значение. Такой прием называется инициализацией:
package main import "fmt" func main() { var hello string = "Hello world" fmt.Println(hello) }
Если мы хотим сразу определить несколько переменных и присвоить им начальные значения, то можно обернуть их в скобки:
package main import "fmt" func main() { var ( name string = "Tom" age int = 27 ) fmt.Println(name) // Tom fmt.Println(age) // 27 }
Отличительной особенностью переменных является то, что их значение можно многократно изменять:
package main import "fmt" func main() { var hello string = "Hello world" fmt.Println(hello) // Hello world hello = "Hello Go" fmt.Println(hello) // Hello Go hello = "Go Go Go Ole Ole Ole" fmt.Println(hello) // Go Go Go Ole Ole Ole }
Также допустимо краткое определение переменной в формате:
имя_переменной := значение
После имени переменной ставится двоеточие и равно и затем указывается ее значение.
package main import "fmt" func main() { name := "Tom" fmt.Println(name) }
В этом случае тип данных явным образом не указывается, он выводится автоматически из присваиваемого значения.