Golang: Константы
Константы — это значения, которые объявляются один раз и не могут быть изменены во время выполнения программы. Они удобны для хранения фиксированных значений, таких как статусы, пороговые значения или конфигурационные параметры.
Константы в Go объявляются с помощью ключевого слова const. Синтаксис:
const name type = valueТип указывать не обязательно — он будет выведен автоматически:
const greeting = "Hello, Hexlet"
const age = 10Несколько констант можно объединить в один блок:
const (
StatusOK = 200
StatusNotFound = 404
)Публичность и приватность
Как и функции, переменные и другие идентификаторы, первая буква имени влияет на область видимости:
const (
// экспортируемая (публичная) константа — доступна из других пакетов
StatusOK = 200
// неэкспортируемая (приватная) — доступна только внутри текущего пакета
statusInternalError = 500
)Область видимости
Константы могут быть объявлены как на уровне пакета, так и внутри функции:
package main
import "fmt"
const defaultStatus = 200 // пакетная область
func main() {
const status = 404 // локальная область
fmt.Println(defaultStatus) // => 200
fmt.Println(status) // => 404
}Автоматическая нумерация с iota
Если нужно создать набор последовательных чисел, можно использовать iota. Это встроенный идентификатор, значение которого увеличивается на единицу в рамках блока const.
const (
RoleGuest = iota // 0
RoleUser // 1
RoleAdmin // 2
RoleSuperAdmin // 3
)Задание
В больших проектах часто используется gRPC — высокопроизводительный RPC (Remote Procedure Call)-фреймворк для коммуникации между микросервисами. Ошибки в gRPC стандартизированы и представлены в виде строк для пользователя, либо в виде чисел для компьютера.
Представим, что нам нужно написать конвертер ошибок в числовой формат для gRPC. Реализуйте функцию ErrorMessageToCode(msg string) int, которая возвращает числовой код для заданного значения. Список сообщений и соответствующих кодов:
OK = 0
CANCELLED = 1
UNKNOWN = 2В реальности список намного шире. Мы для простоты ограничимся тремя ошибками. Учтите, что если в функцию передать неизвестную ошибку, она должна вернуть код ошибки для сообщения UNKNOWN.
Полезное
Golang: Константы
Константы — это значения, которые объявляются один раз и не могут быть изменены во время выполнения программы. Они удобны для хранения фиксированных значений, таких как статусы, пороговые значения или конфигурационные параметры.
Константы в Go объявляются с помощью ключевого слова const. Синтаксис:
const name type = valueТип указывать не обязательно — он будет выведен автоматически:
const greeting = "Hello, Hexlet"
const age = 10Несколько констант можно объединить в один блок:
const (
StatusOK = 200
StatusNotFound = 404
)Публичность и приватность
Как и функции, переменные и другие идентификаторы, первая буква имени влияет на область видимости:
const (
// экспортируемая (публичная) константа — доступна из других пакетов
StatusOK = 200
// неэкспортируемая (приватная) — доступна только внутри текущего пакета
statusInternalError = 500
)Область видимости
Константы могут быть объявлены как на уровне пакета, так и внутри функции:
package main
import "fmt"
const defaultStatus = 200 // пакетная область
func main() {
const status = 404 // локальная область
fmt.Println(defaultStatus) // => 200
fmt.Println(status) // => 404
}Автоматическая нумерация с iota
Если нужно создать набор последовательных чисел, можно использовать iota. Это встроенный идентификатор, значение которого увеличивается на единицу в рамках блока const.
const (
RoleGuest = iota // 0
RoleUser // 1
RoleAdmin // 2
RoleSuperAdmin // 3
)Задание
В больших проектах часто используется gRPC — высокопроизводительный RPC (Remote Procedure Call)-фреймворк для коммуникации между микросервисами. Ошибки в gRPC стандартизированы и представлены в виде строк для пользователя, либо в виде чисел для компьютера.
Представим, что нам нужно написать конвертер ошибок в числовой формат для gRPC. Реализуйте функцию ErrorMessageToCode(msg string) int, которая возвращает числовой код для заданного значения. Список сообщений и соответствующих кодов:
OK = 0
CANCELLED = 1
UNKNOWN = 2В реальности список намного шире. Мы для простоты ограничимся тремя ошибками. Учтите, что если в функцию передать неизвестную ошибку, она должна вернуть код ошибки для сообщения UNKNOWN.
Полезное
Ваше упражнение проверяется по этим тестам
package solution
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestErrorMessageToCode(t *testing.T) {
a := assert.New(t)
a.Equal(0, ErrorMessageToCode("OK"))
a.Equal(1, ErrorMessageToCode("CANCELLED"))
a.Equal(2, ErrorMessageToCode("UNKNOWN"))
a.Equal(2, ErrorMessageToCode("err"))
}Решение учителя откроется через:
20:00
