Go-Spring: еще один стиль Go!

задняя часть Go

Go-Spring — это набор фреймворков приложений GoLang, реализованный путем имитации корзины семейства Java Spring. Он по-прежнему следует принципу "привычка лучше, чем конфигурация" и обеспечивает внедрение зависимостей, автоматическую настройку, "из коробки" и расширенную третью часть. -партийные библиотеки классов.Интеграция и другие функции могут позволить программистам писать гораздо меньше стандартного кода.

1. Введение

В конце прошлого года технологический стек моей команды изменился в связи с корректировкой бизнеса с PHP + Java на Golang + Java. Когда я впервые столкнулся с Golang, мне было довольно некомфортно, во-первых, его необычный синтаксис, а во-вторых, отсутствие зрелого и удобного в использовании фреймворка для разработки. Проблема с синтаксисом занимает много времени и кода пишется больше, поэтому я потихоньку привыкаю, но без удобного фреймворка разработки это слишком сильно скажется на эффективности разработки и качестве кода.Как старший разработчик ствола семейства Java + Spring , Я надеюсь изменить это Статус-кво. После периода использования и исследования я обнаружил, что можно придумать решение, подобное Spring Family Bucket (Spring Framework + Spring Boot + Spring Cloud)!

Статус «семейного сегмента» Spring в мире Java, естественно, не нужен: он не только доказывает разработчикам Java, что разработка на основе аннотаций, разработка на основе АОП и разработка, ориентированная на интерфейсы, могут обеспечить большую гибкость программ, но, что более важно, обеспечивает отличную гибкость. методы разработки, такие как внедрение зависимостей, декларативные транзакции, унифицированная обработка исключений, автоматическая загрузка модулей, более простое управление Maven и более простое модульное тестирование.

Но GoLang и Java все-таки разные, почему я верю, что смогу это сделать? Чтобы ответить на этот вопрос, мы на самом деле отвечаем на другой вопрос, а именно, какие языковые функции Java поддерживают основные возможности, которые может реализовать Spring Family Bucket, и каковы аналогичные языковые функции GoLang?

Отслеживание источника, байт-код Java, отражение, аннотации, сканирование пакетов и другие механизмы поддерживают основные функции Spring Family Bucket, такие как АОП-разработка, внедрение зависимостей, декларативные транзакции и автоматическая загрузка модулей. GoLang не может реализовать АОП, потому что у него нет байт-кода. Но в GoLang есть механизмы Tags, Reflection, _ Imports и init(), поэтому, хотя реализация на Java не обязательно элегантна, она также может реализовать основные функции корзины семейства Spring, такие как внедрение зависимостей и автоматическая загрузка модулей. . Кроме того, хотя GoLang не может реализовать АОП, того же можно добиться с помощью ПО промежуточного слоя.

После некоторых исследований и практики, наконец, родился Go-Spring! На мой взгляд, Go-Spring, как и сам GoLang, был рожден с духом бунтарства и инноваций.GoLang появился в манере, отличной от синтаксиса основных языков программирования, в то время как Go-Spring использовал ориентированный на интерфейс интерфейс и внедрение зависимостей в вопросах. Перед вашими глазами предстанут самые разные абсолютно Java-возможности.

2. Особенности

Go-Spring — это набор фреймворков приложений GoLang, реализованный путем имитации корзины семейства Java Spring. Он по-прежнему следует принципу "привычка лучше, чем конфигурация" и обеспечивает внедрение зависимостей, автоматическую настройку, "из коробки" и расширенную третью часть. -партийные библиотеки классов.Интеграция и другие функции могут позволить программистам писать гораздо меньше стандартного кода. Подводя итог, Go-Spring обладает как минимум пятью характеристиками:

▍Расширяемая начальная структура, которая поможет вам элегантно организовать код.

На следующей картинке показана функция запуска rtmp сервера.Здесь перехвачена только ее часть.Видно,что код функции запуска слишком длинный,и его нужно тщательно организовать,чтобы обеспечить читабельность кода .


Использование стартовой среды Go-Spring может инкапсулировать эти процессы запуска в отдельные файлы, делая функции более связными, а код — более понятным. На рисунке ниже показан упакованный файл запуска.


После использования стартового фреймворка Go-Spring процесс запуска программы становится очень простой строкой кода!


▍Ориентированность на интерфейс + внедрение зависимостей, гибкая замена решений по внедрению

Go-Spring предоставляет унифицированный интерфейс API для сервисов Redis, но существует несколько решений для базовой реализации. Пользователям нужно обращать внимание только на интерфейс API при написании бизнес-кода с использованием службы Redis, и им не нужно заботиться о базовом решении.


Конечно, пользователи в конечном итоге выберут базовую реализацию службы Redis, и для внедрения этой реализации требуется всего одна строка кода!


Если вы хотите переключиться на другие низкоуровневые реализации Redis, это всего лишь вопрос одной строки кода.

▍Автоматическая привязка элементов конфигурации для упрощения использования файлов конфигурации

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


Go-Spring также поддерживает привязку различных файлов конфигурации в соответствии с работающей средой.Например, Go-Spring использует файл конфигурации application-test.properties при обнаружении автономной среды, а application-online.properties — при обнаружении онлайн-среды. обнаружен файл конфигурации.


▍Эффективная помощь в управлении зависимостями проекта

Go-Spring предоставляет абстрактный интерфейс для каждого модуля, и пользователям не нужно заботиться о том, как интерфейс реализован внутри, что может легко решить проблему обновлений зависимостей. Go-Spring гарантирует, что все выпущенные версии зависимостей проекта верны, и каждая версия Go-Spring будет обновлять зависимости, так что пользователям нужно только обращать внимание на изменения версии Go-Spring, чтобы пользоваться другими зависимостями Преимущества автоматического обновления!

▍Упростите сложное модульное тестирование

Модульные тесты GoLang, особенно http модульные тесты, отстой! Проекты, запущенные с помощью Go-Spring, могут использовать реальную среду выполнения проекта для модульного тестирования вместо поддельной среды http.

3. Компоненты

Go-Spring состоит из четырех основных проектов, среди которых:


  • go-spring реализует основные функции, такие как контейнер IoC и внедрение зависимостей;
  • go-spring-boot обеспечивает автоматическую настройку и запуск приложений;
  • go-spring-cloud основан на мире открытого исходного кода для создания инфраструктуры микросервисов, доступной каждому;
  • go-spring-didi фокусируется на внутренней технологии Didi для реализации инфраструктуры микросервисов с характеристиками Didi.

4. Примеры

Ниже я покажу вам, как использовать Go-Spring через простейший http-сервис.

1. Создайте новый файл main.go, создайте программу запуска и укажите каталог, в котором находится файл конфигурации.


2. Внедрить в программу службу echo http.


3. Создайте новый файл example.go, реализуйте сервис-пример и зарегистрируйте маршрут интерфейса http в функции InitControllr().


4. Зарегистрируйте пример объекта службы в IoC-контейнере Go-Spring, чтобы Go-Spring мог автоматически загружать маршрут интерфейса http, зарегистрированный пользователем.


5. Введите пакет, в котором находится образец службы, в файле main.go, чтобы платформа Go-Spring могла загрузить модуль, в котором находится образец службы, при запуске.

Выполнив вышеуказанные 5 шагов, мы получили простую, но полную службу http, используйте команду go run main.go для запуска программы и используйте curl http://localhost:8080/ для тестирования, вы можете видеть, что возвращаемый результат запрос следующий:

{"code":900001,"msg":"biz error"}

Хорошо, вы начали чувствовать силу Go-Spring! Давайте посмотрим, как писать модульные тесты для проектов, использующих платформу Go-Spring.

Во-первых, мы можем написать функцию TestMain, которая запускает настоящий http-сервер.

На самом деле код, показанный на рисунке, можно упростить и сократить до одной строки.

Затем мы можем написать тестовую функцию для отправки настоящих HTTP-запросов, без подделок или моков.

Выполните этот модульный тест, и вы обнаружите, что получаете тестовую среду, которая полностью свободна от моков и подделок, полностью функциональна и может быть отлажена с помощью точек останова.

5. Резюме

В дополнение к возможности создавать http-сервисы и модульные тесты, как показано выше, Go-Spring поддерживает сервисы mysql, сервисы Redis, сервисы kafka, сервисы ddmq, сервисы регистрации и обнаружения сервисов, а также различные сервисы rpc и многое другое. Компоненты И новые функции постоянно добавляются через Didi Neiyuan, и Go-Spring будет становиться все более и более совершенным и простым в использовании в будущем!

Еще один стиль Го! Я лично считаю, что Go-Spring представляет собой новую модель программирования или даже новый способ продуктивности. Я надеюсь, что в процессе использования Go-Spring каждый сможет раскрепостить свой разум, повысить эффективность и обрести больше счастья и свободы. дополнительное время для друзей и семьи тоже!

Эта статья была впервые опубликована компанией Pratt & Whitney Travel Product Technology (ID: pzcxtech).