Search
Write a publication
Pull to refresh
0
0
Send message

Еще есть https://github.com/ory/dockertest для тех же целей.

type Duck interface {
  Fly() error
  Swim() error
  Quack(string) error
}

Не самый лучший пример использования интерфейсов в Go. Делайте интерфейсы максимально узкими по назначению.
Как можно переделать интерфейс из статьи
type Flyer interface {
	Fly() error
}

type Swimmer interface {
	Swim() error
}

type Quacker interface {
	Quack(string) error
}

type Duck interface {
	Flyer
	Swimmer
	Quacker
}

type Pinguin interface {
	Swimmer
	Quacker
}


Как это используется в реальной жизни

В качестве альтернативы можно посмотреть на транслятор обычного Питона (а не новый язык как в случае Cython) в Си: github.com/Nuitka/Nuitka
Без каких-то особых проблем на нем даже смог скомпилировать такой крупный проект как youtube-dl !

Если как self-hosted сервис, то есть Gitea. К сожалению, там нет встроенных CI/CD фич, но можно использовать для этого внешние совместимые сервисы.
Для CI из этого списка мне приглянулся Woodpecker.

Го типизированный язык, данными структур и других атомарных типов компилятор может дирижировать как ему угодно, что позволяет не хранить в рантайме для них информацию о типе. Эта информация вкладывается в контейнер интерфейса при присваивании значения только во время компиляции.

Для слайсов, мап, каналов, интерфейсов оператор '==' работает над контейнером, а не над данными внутри.
Нетипизированный nil присваивается в контейнер, а типизированный в данные контейнера.
Чтобы узнать что в данных значение nil нужно преобразовать интерфейс сначала в этот тип, затем проверить на nil, либо через рефлексию получить сырой указатель и уже работать с ним.
Пример: https://go.dev/play/p/LHO6WsI9hY_R

Выполнение задач зависит друг от друга, если одна задача прерывает свое выполнение из-за ошибки — все остальные задачи останавливаются тоже…

Для этого уже есть errgroup. Решает те же задачи, но в более идиоматичном для Go виде.

Information

Rating
Does not participate
Registered
Activity