Паттерны в приложениях Go

Go – это язык программирования с открытым исходным кодом, поддерживаемый Google, и он пользуется популярностью в сообществе разработчиков в течение многих лет.

В этой статье собраны некоторые шаблоны, которые обычно используются в проектах с открытым исходным кодом Go, а также советы, основанные на моих знаниях и опыте.

Паттерны

“cmd”

Большинство приложений Go используют cmd каталог для включения нескольких небольших приложений. 

“testdata”

Написание модульного теста – одна из важных вещей, которые разработчики должны делать, чтобы код был правильным и качественным. Обычно мы пишем тесты с вводом в виде файлов (JSON, CSV и т. д.). Обычный способ сделать это – создать testdata каталог, соответствующий тестовым файлам.

“e2e”

Иногда, помимо модульного теста, нам нужен тест e2e или интеграционный тест (например, тест интеграции между обработчиками API и хранилищем, например MySQL / Redis). Чтобы организовать эти тестовые примеры для облегчения сопровождения e2e или  test/e2e. Каталог можно рассматривать как состоящий из нескольких сквозных тестовых примеров. Этот способ также помогает разработчикам запускать модуль / интеграцию отдельно на локальном этапе или этапе CI.

_ struct {}

При создании структуры в Go мы можем дополнительно объявить поля с ключами, чтобы обеспечить постоянное присоединение к полям ключей и разрешить отсутствие нового поля без нарушения изменений, _ struct{} можно использовать в качестве первого поля.

Пример:

package main
type Product struct {
    _             struct{}
    ID            string
    Name          string
    OptionalField bool
}
func main() {
    // compile ok
    _ = &Product{ID: "1", Name: "iPhone 13"}
    // compile failed
    // _ = &Product{"1", "iPhone 13"}
}

Эта первая часть содержит небольшие шаблоны, предназначенные для структурирования приложения Go. В следующих частях мы рассмотрим некоторые другие шаблоны при проектировании библиотеки Go или sdk.

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *