Форматирование кода и gofmt
Код, написанный в одном стиле, удобно и приятно читать. Сравните сами:
Плохо отформатированный код:
func Add(a, b ArrInt) ArrInt 
 
{
length := len(a)
if length-len(b) > 0 
    {
length = len(b) }
c := make(ArrInt, length)
 
for i := 0; i <length; i++ 
    {
    c[i]=a[i]+b[i]
    }
 
    return c } Хорошо отформатированный код:
func Add(a, b ArrInt) ArrInt {
    length := len(a)
    if length-len(b) > 0 {
        length = len(b)
    }
    c := make(ArrInt, length)
    for i := 0; i < length; i++ {
        c[i] = a[i] + b[i]
    }
    return c
} В разных языках вопрос с форматированием решается по-разному. Например, в Python есть официальный стандарт PEP 8, а в C++ — несколько популярных стилей.
Note
Go решает этот вопрос необычным образом: весь код должен быть отформатирован стандартной утилитой gofmt или её расширенной версией goimports. Утилита
goimportsделает то же самое, что иgofmt, но ещё автоматически оптимизирует и сортирует импорты.
Такая утилита позволяет не запоминать, что нужно использовать при выравнивании кода — табы или пробелы, сколько оставлять пустых строк между двумя соседними функциями и прочие мелочи, с которыми машины справляются гораздо лучше людей. Пользуйтесь ею перед публикацией всех своих пакетов — и другие программисты скажут вам спасибо.
Форматирование — далеко не единственное, что определяет качество кода. Разработчики по невнимательности могут употреблять конструкции вроде a = append(a,) или fmt.Printf("Here must be number %d"). В этом случае могут помочь линтеры.
Линтеры и go vet
В экосистеме Go наиболее распространённый линтер — vet.
В отличие от форматера кода gofmt, линтер не даёт стопроцентной гарантии правильности своей работы — могут быть ложноположительные и ложноотрицательные срабатывания. Скорее всего, придётся немного поколдовать с настройками, прежде чем линтер начнёт корректно работать в каждом проекте. Манипуляции с настройкой и подключением линтера к системам CI/CD окупят себя, когда вы сэкономите время на этапе код-ревью.
Документация и godoc
В экосистеме Go есть стандартная утилита для создания документации на основе комментариев в коде — это godoc. Запустите go install golang.org/x/tools/...@latest, чтобы установить все пакеты и утилиты golang.org/x/tools, в том числе godoc.
Документация к любой сущности (функции, структуре, переменной или пакету) — это комментарий, который предшествует декларации этой сущности. Например:
// Foo выполняет очень важную роль в проекте — ничего не делает :)
func Foo() {}
 
// описывает новый тип данных «никнейм» на основе стандартного строкового типа
type nickname string На основе таких комментариев godoc может сгенерировать документацию в формате HTML, man pages и т. д.
Документирование публичного API разрабатываемых пакетов позволяет сторонним разработчикам получить ответы на вопросы относительно функционала без чтения исходников. Документируйте свои пакеты — и жизнь пользователей станет лучше.
Тестирование кода
Как известно, код без тестов по определению сломан. Поэтому тестирование кода — обязательная часть разработки.
📂 Go | Последнее изменение: 23.08.2024 09:47