#4 golang Переменные, константы, объявление и присваивание, блок var
Primary tabs
Forums:
Объявление переменных и присваивание им значений - разные варианты
В Го можно объявлять переменные и присваивать им значения:
package main
import (
"fmt"
)
func main() {
var power int
power = 9000
fmt.Printf("It's over %d\n", power)
}
- выше:
var power int
-- это именно объявление (присваивали же мы значение после), при этом можно как сразу же присвоить значение в момент объявления через var:
var power int = 9000
так и вообще не использовать var но использовать оператор объявления-присваивания "двоеточие равно":
power := 9000
-- тут мы даже не указываем тип, компилятор вычислит его на основе присваиваемого значения
(в Паскале, он, кстати, отвечает просто за присваивание)
При этом можно объявить и сразу несколько переменных под одним var:
var weight, height = 10, 20.5
-- тут две переменные и два значения для них.
Значения по умолчанию
Если при инициаллизации значения не указывать, то они сразу же получают некоторые значения по умолчанию:
package main
func main() {
// значение по умолчанию 0
var myNumber int
}-- тут заметим, что если переменная объявления и не используется, то такой код не скопмилируется.
Объявление в блоке и область видимости на уровне пакета
Как мы помним, в го есть понятие понятие пакета, если переменные объявить на через блок var, то они будут видны на уровне всего пакета
package main
import "fmt"
// объявление нескольких переменных
var weight, height = 10, 20.5
// Объявление в блоке var
var (
vasya string = "Vasya"
petya string = "Petya"
vasyaSalary int = 100
petyaSalary float32 // пока тут значение по умолачанию
/* неиспользуемые переменные можно объявлять в блоке,
но не в функции: */
unused int
)
func main() {
var value = 123
fmt.Printf("value = %v \n", value)
// присваивание в существующие переменные
weight, height = 11, 21
/* Чтобы использовать оператор :=
хотя бы одна переменная должна быть новой,
а вот другие могут быть объявлены где-то еще: */
weight, age := 16, "Молод"
fmt.Println(weight, height, age)
fmt.Printf("%v получил %v, а ", vasya, vasyaSalary)
fmt.Printf("%v получил %v", petya, petyaSalary)
petyaSalary = 120 // поменяе значение
showNext()
}
// проверим доступность переменных, объявленных в блоке var
func showNext() {
// тут
fmt.Printf("\n %v получил %v", petya, petyaSalary)
// А вот к локально для main() переменной value доступа нет
// fmt.Printf("value = %v \n", value)
}
- если положить рядом (в той же папке) нашим основным файлов другой файл (с другим именем) но с указанием на принадлежность к тому же пакету и содержимым вроде (опять объвленин переменных через блок):
// принадлежит к тому же пакету, что и код выше package main var ( externalValue string = "Vasya" )
- то значение externalValue будет доступно и в других файлах того же пакета, например showNext() из предпоследнего примера (можете проверить!)
Источники
В том числе использовали:
- Переменные и определения - Маленькая книга Го: https://github.com/sefus/the-little-go-b...
- Log in to post comments
- 86 reads