Команда go-doc: опции, ключи и примеры использования
Общие команды – Общие команды, присущие различным операционным системам.
go doc
- Show documentation for the current package:
- Show package documentation and exported symbols:
- Show also documentation of symbols:
- Show also sources:
- Show a specific symbol:
Примеры кода, демонстрирующие общие подходы в программировании или же решающие небольшие прикладные задачи. Языки программирования и библиотеки, позволяющие эффективно решать задачи разработки. Объектно-ориентированное программирование, функциональное программирование и прочие подходы и …

Трюки Bash
Полезные заметки по работе с командной строкой: bash и прочие *sh. Однострочники, скрипты, позволяющие решать большие и малые задачи администрирования и настройки Юникс систем. Zsh для современного MacOS, Bash для …

Заметки о настройке различных IT-штуковин. Настройка, допиливание, полировка. Конфигурируем приложения и тюнингуем сервера. Полезные параметры и ключи запуска программ. Увеличиваем скорость, уменьшаем отклик, ускоряем работу и улучшаем результаты работы. Объясняем …

Терминал/Консоль
Команды и инструкции терминала (консоли) Linux, MacOS, Windows и прочих операционных систем. Трюки и особенности командных оболочек, скрипты для администрирования Unix. Программирование и скриптование Windows и Linux, тонкая настройка Macos. …

Также может быть вам интересно:
- Как получить дерево директорий на Bash одним однострочником
- Python: Функции
- Python: Встроенные типы данных (list, set, dict, etc)
- Python: типы данных, переменные, логическое ветвление и циклы
- Как сделать свою middleware в Django (с примерами)
Свежее на «Цифре»
MessageId или как дебажить систему с минимумом проблем
Программы, 50 дней назад
Проверочный список для выпуска промышленных приложений с иллюстрациями
Работа и управление, 91 день назад
В Google Pixel и Windows Snipping Tool есть возможность восстановления обрезанных изображений
Новости, 23.03.2023
Два подарка «под ёлочку» от Heroes of Might and Magic
Новости, 25.12.2022
Вышел Pulsar – редактор кода на основе Atom
Новости, 25.12.2022
Ленивый backup PostgreSQL
Программы, 17.12.2022
Google анонсировала OSV-Scanner: сканер уязвимостей в программных проектах
Новости, 16.12.2022

Gitea запускает коммерческую версию, а недовольные – форк Forĝejo
На днях группа бывших разработчиков Gitea решили создать на базе хостинга кода Gitea свою версию проекта – «Forgejo». Причиной тому …

Пользователи и их создание в Django — своя регистрация на сайте
Если вашим сайтом должны активно пользоваться несколько человек, то полезно их различать, а значит — надо уметь создавать пользователей, либо …

Новый синтаксис старой команды with в Python 3.10
Как же долго моё чувство прекрасного страдало… Но в Python 3.10 появился новый парсер синтаксических конструкций Python!

Добавляем постраничную пагинацию на Django сайт
На сайтах часто встречаются многостраничные объекты: список товаров, список заметок и т.д. Поэтому важно уметь добавить навигацию по страницам на …

Новый оператор match-case в Python
В новой версии Python (3.10) появится новый оператор. Новый оператор сопоставления по шаблону (match-case).

Нет слов, одни. однострочники
На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)
В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если …

Пример своей консольной команды в Django проекте
Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать …

Разграничение прав доступа на Django сайте
Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система …
Как структурировать проект на Golang: гайд от backend-разработчика
Всем привет, меня зовут Авксентий, я backend-разработчик в inDriver. Думаю, каждый начинающий разработчик сталкивался с проблемой, как правильно выстроить архитектуру и структуру проекта. Ведь организация кода проекта — постоянно развивающаяся проблема, а следование стандартной структуре сохраняет чистоту кода и повышает производительность команды.
Когда я начинал писать на Go, то потратил много времени на поиски стандартов структурирования проекта. В итоге так и не нашел официального и точного стандарта — либо информация была неполной, либо это было не то, что нужно. Я решил написать свой гайд на основе опыта. Он для начинающих разработчиков и посвящен тому, как структурировать проект на Golang.

Почему я решил написать эту статью
Правильно выстроенные архитектура и структура проекта в начале способствует безболезненной разработке, масштабированию и легкому внедрению новых разработчиков в проект. Конечно, плоскую структуру тоже можно использовать для маленьких проектов с одним main-файлом, но это непрактично для больших.
Я видел немало проектов, и из каждого взял что-то для себя. Рекомендую ознакомиться с этим проектом — многие ориентируется на него при создании структуры. В моем примере будет более компактная структура — мы детально разберем директорию /internal.
Конечно, метод не претендует на лучший или единственный способ ведения дел. Но, думаю, он хорошо подойдет для начала. Посмотрим на структуру корня проекта:

Директории
/cmd
Точка входа для нашего приложения. Имя директории для каждого приложения должно совпадать с именем исполняемого файла, который вы хотите собрать. Не стоит располагать в этой директории много кода. Самой распространенной практикой является использование маленькой main-функции, которая импортирует и вызывает весь необходимый код из директорий /internal и /pkg.

/internal
Сердце нашего приложения — всю внутреннюю логику приложения храним здесь. /internal не импортируем в других приложениях и библиотеках. Код, который написан тут, предназначен исключительно для внутреннего использования в рамках кодовой базы. С версии Go 1.4 определен механизм, который не позволяет импортировать пакеты вне данного проекта, если они находятся внутри /internal.
В /internal мы храним бизнес-логику проекта и работу с базами данными. В общем, всю логику, связанную с этим приложением. Выстроить структуру внутри /internal можно по-разному, в зависимости от архитектуры. Но я не буду сильно углубляться в нее, а поверхностно покажу, как это выглядит. Приведу пример трехуровневой архитектуры, когда приложение делится на 3 слоя:
- Транспортный.
- Бизнес.
- Базы данных.
Логика должна быть выстроена так, чтобы слои иерархически обращались друг к другу сверху вниз и наоборот. Не допускается, чтобы один слой перескакивал через промежуточный (например, транспортный напрямую в базу данных) и нижний не общался с верхним (например, база данных ходит в транспортный слой).

Сетевой уровень приложения, на котором конечный пользователь взаимодействует с приложением. После обработки запроса вся собранная информация идет на слой ниже.
Как следует из названия, содержит бизнес-логику, которая поддерживает основные функции приложения. Если в логике затрагиваются базы данных, мы идем на слой ниже.
Слой базы данных:
Отвечает за взаимодействие с постоянными хранилищами, такими как базы данных, и прочую обработку информации, которая не связана с бизнесом. Например, чтение и запись в базе данных.

- /app
Точка, где все наши зависимости и логика собираются и запускают приложение. Run-метод, который вызывается из /cmd. - /config
Инициализация общих конфигураций приложения, которые мы прописывали в корне проекта. - /database (слой базы данных)
Файлы содержат методы для взаимодействия с базами данных. - /models (слой базы данных)
Структуры таблиц баз данных. - /services (бизнес-слой)
Вся бизнес-логика приложения. - /transport (транспортный слой)
Здесь храним http-настройки сервера, хендлеры, порты и так далее.
/pkg
Если в /internal мы хранили код, который не могли импортировать в других приложениях, то в /pkg храним библиотеки, используемые в сторонних приложениях. Это нужно, чтобы потом импортировать их в другой проект, а не дублировать код из проекта в проект. В общем, кастомные или общие библиотеки мы храним здесь.
Вы можете не использовать эту директорию, если проект совсем небольшой и добавление нового уровня вложенности не имеет практического смысла.
/configs
Статические конфигурации нашего приложения, связанные с процессом сборки приложения. Обычно это yaml-файлы.
/api
Документация по вашему API. Спецификации OpenAPI или Swagger, файлы JSON Schema, файлы определения протоколов.
/build
Файлы конфигурации для билда проекта, Docker-контейнера и так далее.
/deployments
Содержит файлы, связанные с развертыванием: плейбуки Ansible, манифесты Docker Compose, манифесты и настройки Kuberntes, диаграммы Helm.
/docs
Документирование кода — важная часть в начале проекта. Поэтому всю документацию кода и дизайна (в дополнение к автоматической документации Godoc) храним здесь.
README.md
Трудно ожидать, что кто-то захочет погрузиться в ваш код, если ему не предоставили общего описания проекта. Поэтому файл README тоже необходим.
Распространенные директории
Хочу показать распространенные директории, которые я не включил в свой проект. Вы можете ознакомиться с ними, и в случае необходимости добавить себе.
/scripts
Скрипты для сборки, установки, анализа и прочих операций над проектом. Они позволяют оставить основной Makefile небольшим и простым.
/testdata
Дополнительные внешние приложения и данные для тестирования. Вы можете организовывать структуру директории /test так, как вам угодно. Для больших проектов имеет смысл создавать вложенную директорию с данными для тестов.
/tools
Инструменты поддержки проекта. Отмечу, что эти инструменты могут импортировать код из директорий /pkg и /internal.
/assets
Другие ресурсы, необходимые для работы: например, картинки и логотипы.
/web
Эта директория понадобится, если вы реализуете веб-приложение. Здесь находятся специальные компоненты для веб-приложений: статические веб-ресурсы, серверные шаблоны и одностраничные приложения.
/migrations
Здесь все миграции, связанные с базами данными: например, SQL-файлы.
Вывод
Конечно, не надо строго следовать моей структуре. Можно взять часть и отредактировать все под себя. Но когда я начинал, мне не хватало такого подробного гайда. Так что, надеюсь, статья вам помогла!
На всякий случай, оставлю ссылку на свой публичный sample-проект на GitHub. Если у вас есть вопросы, задавайте их в комментариях.
- Блог компании inDrive.Tech
- Программирование
- Проектирование и рефакторинг
- Go
Малоизвестные преимущества Go: почему стоит выучить этот язык и с чего начать
Язык программирования Golang разработали в Google ещё в 2009 году, но стремительно набирать популярность начал только в последние годы. Разработчик Кирилл Роговой в своём блоге рассмотрел некоторые важные особенности Go. Материал доступен даже тем, кто не имеет опыта работы с Go, а в конце статьи можно найти ссылки на полезные ресурсы, которые помогут поближе познакомиться с этим языком.

GoDoc
Документации в Go — как и простоте — уделяется особое внимание. GoDoc — это инструмент статического анализа, который автоматически генерирует документацию из кода. В отличие от JavaDoc, PHPDoc или JSDoc, в GoDoc примечательно то, что для аннотирования инструмент использует исключительно английский язык.
GoDoc извлекает максимум информации из кода, чтобы структурировать и форматировать документацию. Она будет содержать всё необходимые «фишки» вроде перекрёстных ссылок, примеров кода и прямых ссылок на репозиторий системы управления версиями. Любой комментарий автоматически отражается в документации. Можно также добавлять фрагменты кода и их запускать прямо в браузере или локально.
GoDoc — единственный инструмент создания документации, который использует всё сообщество: документация для всех библиотек и приложений на Go имеет один формат, что помогает сберечь массу времени на её изучение.
Статический анализ кода
Значительное место в Go отведено статическому анализу. Подтверждение этому — такие инструменты, как godoc для создания документации, gofmt для форматирования кода, golint для его анализа и выявления возможных ошибок и многие другие. Все они объединены в единую утилиту контроля качества GoMetaLinter, которая запускает параллельно все анализаторы кода. Эти инструменты запускаются и как отдельные приложения командной строки и легко интегрируются с любой средой разработки.
Статический анализ кода — не новая вещь в программировании, но Go позволяет быстро и просто провести дотошный анализ по всем направлениям и бережёт массу времени. Можно запросто создавать и свои анализаторы: для этого есть специальные встроенные пакеты для парсинга и работы с источниками Go.
Встроенная среда тестирования
В Go есть встроенный инструмент для тестирования кода с акцентом на простоту и эффективность. Он предлагает простейший API и содержит минимум утверждений. Его можно использовать для тестирования и профайлинга, а также добавлять исполняемые образцы кода.
Чтобы запустить тестирование, достаточно выполнить команду go test. Инструмент позволяет выполнять тесты параллельно, пропускать их, и много чего другого.
Обнаружение состояний гонки
Для достижения многозадачности язык использует легковесные потоки goroutines и каналы в качестве средства взаимодействия между ними. Здесь можно найти их краткий обзор.

Одной из проблем проектирования многопоточных приложений является риск такой ошибки, как состояние гонки. Это происходит, когда несколько конкурирующих операций завершаются не в том порядке, в котором ожидается, что может привести к огромному количеству ошибок, которые особенно сложно обнаружить.
Авторы Go серьёзно подошли и к этой проблеме, создав мощное средство для обнаружения гонок, полностью интегрированное в инструментарий языка. Подробнее о Race Detector можно прочитать в блоге Go.
Доступность
Все функции Go можно выучить за один вечер. Здесь есть стандартная библиотека, некоторые библиотеки требуют специальных знаний, но пары часов вполне хватит, чтобы уверенно написать простой HTTP-сервер или приложение командной строки. Язык имеет отличную документацию, а большинство сложных тем команда создателей проекта уже осветила в своём блоге.
Go значительно проще освоить, чем Java, Javascript, Ruby, Python или даже PHP. Среду разработки достаточно легко настроить, а от команды понадобится намного меньше усилий для создания готового кода.
Рефлексия
Рефлексия — это способность добраться до различного рода метаинформации о таких конструкциях языка, как переменные или функции. Так как Go — статически типизированный язык, он имеет некоторые ограничения в плане обобщённого программирования, особенно в сравнении с динамическими Javascript или Python.
Также в Go нет так называемых дженериков, что несколько лишает его преимуществ абстрактного подхода в программировании. Но многие считают это плюсом Go из-за сложности, которую привносят обобщённые типы.
Философия Go заключается в том, чтобы не переусложнять код, что свойственно и динамическим языкам. В Go нужно по возможности придерживаться статических типов и использовать интерфейсы, когда точно известно, какие типы применяются. Интерфейсов в Go много, и они имеют свои особенности.
Однако в некоторых случаях достаточно трудно определить тип данных, с которым разработчик имеет дело. Для этого есть замечательный встроенный пакет Reflect, который позволяет оперативно определить тип переменной во время работы программы.
Ограничения
В Go есть стандарт написания кода, которого все должны придерживаться. Есть единая встроенная среда тестирования, входящая в набор инструментальных средств. Есть правила структурирования и сопровождения кода, подбора имён, реализации многозадачности.
Хотя может показаться, что ограничений в языке слишком много, это значительно экономит время команде на выбор инструментов и помогает избежать проблем с коммуникацией, а также вносит чёткость при создании архитектуры нового кода и позволяет проще разобраться в уже существующем.
Культура
Часто говорят, что при изучении нового естественного языка человек также погружается в культуру того народа, который на нём говорит. И чем больше языков изучает человек, тем больше меняется его личность.
То же самое относится и к компьютерным языкам. Независимо от того, как человек будет применять тот или иной язык в будущем, он всегда позволяет с другого ракурса посмотреть на программирование в целом или же на некоторые конкретные методы, будь то функциональное программирование, сопоставление с образцом, или прототипное наследование. Каждый новый язык расширяет круг подходов и инструментарий разработчика, а также изменяет его взгляд на качественное программирование в общем.
И Go в этом контексте — ценное приобретение. Код, созданный на нём, должен быть простым и понятным, без излишних абстракций и с акцентом на удобство в сопровождении. Go создан для того, чтобы сфокусироваться непосредственно на написании кода и не отвлекаться на подбор инструментов и настройку окружения. В нём «должен быть только один способ написать код».
Полезные ресурсы
Интерактивный тур по Go, с которого можно начать знакомство с языком.
Более подробно о преимуществах Go – в блогах на Medium:
- Why should you learn Go? — Keval Patel
- Farewell Node.js — TJ Holowaychuk
Видео уроки Golang
Вы действительно хотите открыть доступ к тестированию по курсу Golang на 40 дней?
ВИДЕОУРОК №6. Пакеты. GoDoc
Для просмотра полной версии видеокурса, онлайн тестирования и получения доступа к дополнительным учебным материалам купите курс Купить курс
Для просмотра всех видеокурсов ITVDN, представленных в Каталоге, а также для получения доступа к учебным материалам и онлайн тестированию купите подписку Купить подписку
Введение. Основные понятия языка, стиль написания, пакеты и типы.
Цель урока — обучить учащегося базовым конструкциям языка. Автор продемонстрирует виды объявления переменных с типами и их назначения. Также вы узнаете, как устроены пакеты в Golang.
Читать дальше.
Первая программа. Утилиты Go.
Цель урока обучить учащегося утилиты Go. Показать различные команды, связанные с утилитой Go.
Читать дальше.
Массивы, срезы, словари, оператор range.
Цель урока обучить учащегося массивам, срезам, словарям, и оператора range. Показать различие между массивом и срезом. Показать, как выделяется память на инициализацию среза. Обучить как работать с массивами, срезами и словарями.
Читать дальше.
Структуры и интерфейсы. Интерфейсный тип данных.
Цель урока обучить учащегося структурам и интерфейсам. Показать разницу передачи аргумента по указателю или по значению. Показать, что такое embeding. Показать различие между функцией и методом. Обучить как работать с ООП в Go.
Читать дальше.
Многопоточность. Горутины, каналы, оператор select.
Цель урока обучить учащегося основам многопоточного программирования в Go.
Читать дальше.
Пакеты. GoDoc
Цель урока обучить учащегося работать с некоторыми стандартными библиотеками go. А также пользоваться утилитой GoDoc.
Читать дальше.
IO, пакет bytes, буферы.
Цель урока обучить учащегося работать с файловой структурой в Go, научить работать с пакетами os, ioutil, bytes.
Читать дальше.
Тестирование. Измерение производительности функций.
Обучить учащегося тестировать программный код, и уметь измерять производительность кода.
Читать дальше.
ПОКАЗАТЬ ВСЕ
Поделитесь этим видео в соц сетях
Доступ к полному курсу с учебными материалами и тестированием на 30 дней за 14,99
Покупай подписку с доступом ко всем курсам и сервисам
Библиотека современных IT знаний в удобном формате
Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.
- Все видеокурсы на 3 месяца
- Тестирование по 10 курсам
- Проверка 5 домашних заданий
- Консультация с тренером 30 мин

Halloween
- Все видеокурсы на 1 год
- Тестирование по 24 курсам
- Проверка 20 домашних заданий
- Консультация с тренером 120 мин
- Скачивание видео уроков
- Возможность приостановки обучения
- Все видеокурсы на 6 месяцев
- Тестирование по 16 курсам
- Проверка 10 домашних заданий
- Консультация с тренером 60 мин