Используйте необработанные строковые литералы, чтобы избежать экранирования
Go поддерживает необработанные строковые литералы, которые могут занимать несколько строк и включать кавычки. Используйте их, чтобы избежать написания строк с ручным экранированием, которые труднее читать.
Менее удачный вариант:
wantError := "unknown name:\"test\""
Более удачный вариант:
wantError := `unknown error:"test"`
Инициализация ссылок на структуры
Используйте &T{} вместо new(T) при инициализации ссылок на структуру, чтобы это было консистентно с инициализацией структуры.
Менее удачный вариант:
sval := T{Name: "foo"}
// неконсистентно
sptr := new(T)
sptr.Name = "bar"
Более удачный вариант:
sval := T{Name: "foo"}
sptr := &T{Name: "bar"}
Инициализация карт
Предпочитайте make(..) для пустых карт и карт, заполняемых программно. Это делает инициализацию карты визуально отличимой от объявления и упрощает добавление подсказок размера позже, если они доступны.
Менее удачный вариант:
// Объявление и инициализация визуально похожи.
var (
// m1 безопасно читать и записывать;
// m2 запаникует при записи.
m1 = map[T1]T2{}
m2 map[T1]T2
)
Более удачный вариант:
// Объявление и инициализация визуально различны.
var (
// m1 безопасно читать и записывать;
// m2 запаникует при записи.
m1 = make(map[T1]T2)
m2 map[T1]T2
)
По возможности предоставляйте подсказки емкости при инициализации карт с помощью make().
С другой стороны, если карта содержит фиксированный список элементов, используйте литералы карты для инициализации карты.
Менее удачный вариант:
m := make(map[T1]T2, 3)
m[k1] = v1
m[k2] = v2
m[k3] = v3
Более удачный вариант:
m := map[T1]T2{
k1: v1,
k2: v2,
k3: v3,
}
Основное практическое правило - использовать литералы карты при добавлении фиксированного набора элементов во время инициализации, в противном случае используйте make (и укажите подсказку размера, если она доступна).
Читайте также:
- Go style guides: избегайте голых параметров
- Go style guides: nil - это допустимый срез
- Go style guides: уменьшайте область видимости переменных
Комментариев нет:
Отправить комментарий