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

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

"cmd"

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

Ссылки:





"testdata"

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

Ссылки:

https://go.dev/src/image

https://dave.cheney.net/2016/05/10/test-fixtures-in-go

"e2e"

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

Ссылки:





_ структура {}

При буквальном построении структуры в 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"}
}

Ссылки:

https://github.com/aws/aws-sdk-go/blob/main/service/rds/api.go

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

Оставайтесь с нами и будьте в безопасности!