Объявление констант
Объявление констант похоже на объявление переменных. Ключевое слово var
заменяется на ключевое слово const
.
Примечание: Константам необходимо присвоить значение при объявлении.
В Go все переменные должны быть использованы после определения, но константы являются исключением. Даже если они не используются, ошибки не будет.
Синтаксис объявления константы выглядит следующим образом:
const name [type] = value
name
- это имя объявляемой константы. type
- это тип данных константы, но его можно опустить, так как Go может автоматически его вывести. Значение в конце - это значение, присвоенное константе.
Обратите внимание, что для объявления констант можно использовать только следующие типы:
- Целочисленные типы
- Числа с плавающей точкой
- Комплексные типы
- Логические типы
- Строковые типы
Давайте рассмотрим пример. Создайте новый файл с именем const.go
в директории ~/project
:
touch ~/project/const.go
Введите следующий код в файл const.go
:
package main
import "fmt"
// Declare a single constant
const labex string = "LabEx" // explicitly specify the type as string
const labs = "LABS" // automatically inferred as string by the compiler
// Declare multiple constants
const (
hangzhou, chengdu = "HANGZHOU", "CHENGDU"
monday, tuesday, wednesday = "MONDAY", "TUESDAY", "WEDNESDAY"
)
func main() {
fmt.Printf("The type of labex is: %T, and its value is %s\n", labex, labex)
fmt.Printf("The type of labs is: %T, and its value is %s\n", labs, labs)
fmt.Println()
fmt.Println(hangzhou, chengdu)
fmt.Println(monday, tuesday, wednesday)
}
go run ~/project/const.go
После запуска программы вывод будет следующим:
The type of labex is: string, and its value is LabEx
The type of labs is: string, and its value is LABS
HANGZHOU CHENGDU
MONDAY TUESDAY WEDNESDAY
Здесь мы демонстрируем объявление одиночных и множественных констант. При объявлении множественных констант рекомендуется использовать скобки.
В программе мы демонстрируем только объявление строковых констант. Однако константы могут иметь и другие типы, такие как целые числа и логические значения.
При объявлении множественных констант с использованием скобок если константа не инициализирована, она унаследует значение предыдущей константы.
Введите следующий код в файл const.go
:
package main
import "fmt"
const (
monday = "MONDAY"
tuesday = "TUESDAY"
wednesday = "WEDNESDAY"
thursday
friday
)
func main() {
fmt.Println(monday, tuesday, wednesday, thursday, friday)
}
go run ~/project/const.go
Вывод будет следующим:
MONDAY TUESDAY WEDNESDAY WEDNESDAY WEDNESDAY
Здесь thursday
и friday
не имеют явных значений. Согласно правилам Go, когда константа не явно инициализирована, она унаследует значение предыдущей константы. В этом случае:
thursday
наследует значение wednesday
.
friday
также наследует значение wednesday
.
Такое поведение позволяет писать более компактный код, но может привести к неожиданным результатам, если вы не знаете об этом.
Если вы хотите, чтобы thursday
и friday
имели разные значения, вам нужно явно их присвоить:
const (
monday = "MONDAY"
tuesday = "TUESDAY"
wednesday = "WEDNESDAY"
thursday = "THURSDAY"
friday = "FRIDAY"
)
Это даст ожидаемый вывод:
MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY