Codded

GoLang: Модули Go в реальной жизни

Прочитал статью Go Modules In Real Life (Chip Keyes, 06.2019г.). В ней описываются ситуации нюансы использования модулей GO в разработке.Модули Go появились с версии 1.11 и позволяют уйти от жесткой привязке к GOPATH. Чем же еще это полезно и как и когда их использовать?

Краткая выжимка:

1. Модуль — это коллекция пакетов GO объединенных в одну общую единицу.
Collapse )
Codded

Работа со строками в GoLang — fmt.Sprintf или strconv?

Прочитав Bad Go: frivolous Sprintf (2019 год) вот что понял:

1) fmt.Sprintf — хорошо и удобно, но если надо быстро — используй strconv.Format* и другие его методы. Оно меньше памяти потребляет и работает почти в 4 раза быстрее с выводом. 

2) fmt.Sprintf — тратит время на разбор формата из первого аргумента. 

3)Когда используете fmt.Sprintf  формируйте все строку сразу, т.к. Sprintf для кусочков и конкатенация — это дополнительное выделение памяти и это замедляет.


Codded

7 незаметных подводных камней в языке Go

1. Размеры Int могут меняться в зависимости от разрядности. Так что ваш код может перестать работать на 32 разрядной машине, банально вызывая переполнение.

Эту ошибку можно увидеть в построителе парсеров языка antlr4 - разработчики просто не учли, что люди пользуются еще 32-разрядными системами, в итоге код на 32-разрядной ОС не работает из-за меншего размера Int вызывая переполнение.

2. Осторожнее с приведением типов к типам указателям. Указатель на тип — это не сам тип, тут не будет разыменовывание работать автоматически.

Пример:
f { ... return nil, NotFoundError } err = f()
if _, ok := err.(*NotFoundError); ok { // ... } // это не сработает!

Используйте лучше подход стандартной библиотеки GO — проверка ошибок не по типу, а по назначению, см. os.IsExist(error) и os.IsPermission(error).

Collapse )Collapse )
Серьёзно о главном

Интерфейсы и композиция для эффективного тестирования программ на языке Go

Оригинал: nathan leclaire, https://nathanleclaire.com/blog/2015/10/10/interfaces-and-composition-for-effective-unit-testing-in-golang/ 10.10.2015

К чему призывает автор:

1. Используйте интерфейсы GO — это удобно в работе, широко используется в стандартной библиотеке, и упрощает тестирование, избавляя от использование mock и stub библиотек.

2. Составляйте высокоуровневые интерфейсы через композицию (встраивание).

3. Будьте хорошо знакомы с go test и пакетом testing

Где, как применить?

Collapse )
Кот канарский полосатый толстый

Как научить ребенка кататься на двухколесном велосипеде? Мой опыт

Обучение катанию на двухколесном велосипеде, как научить ребенка быстро?
Обучение катанию на двухколесном велосипеде, как научить ребенка быстро?

Сначала велосипед берем на 4 колеса — двухколесный с приставными съемными колесами. Даем две недели покататься так, а лучше месяц, колеса выставляем по высоте вровень с ведущим. Далее колеса боковые поднимаем повыше (1-2 см от земли), чтобы велик как бы сильнее шатался из стороны в сторону и снова сажаем дите кататься. 

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

Collapse )
Серьёзно о главном

Пакеты для проверки выражений, правил в GoLang

В процессе разработки своего решения для подбора правил обработки — процессора правил, узнал о существовании алгоритмов сопоставления с образцом. Для Go есть реализация алгоритма Rete (1: https://github.com/GNaive/naive-rete-go, 2: https://github.com/phomola/rete). 

Для поиска правил мы проверяем их условия совпадения. Как можно сохранить эти условия, если правила меняются динамически? Можно придумать свое решение или использовать библиотеки для проверки выражений, они преобразуют текстовую строку в исполняемые код и проверяют его, обычно это логическое выражение, возвращающее true/false.

Что такое Процессор правил (Rule Engine) смотри уhttps://martinfowler.com/bliki/RulesEngine.html

Итак рассмотрим некоторые пакеты.

Collapse )
Codded

Визитка, ваш инструмент продаж

Игорь Манн (владелец издательства Манн, Иванов и Фербер) в своем выступлении на форуме Синергия рассказывал о пользе визитки, да именно бумажной визитки! Конечно кое где их уже не используют, но это достаточно редкое явление.

Визитка это не только ваше лицо, но инструмент продажи и привлечения клиента. Клиент должен не только узнать, что вы делаете и кто вы, но и получить предложение. Даже если это всего лишь 3% от ваших заказов, вы откажетесь от 3% заказов просто так?

Collapse )
Codded

Архитектура приложения основанная на компонентах

Разбираясь в вопросах конструирования нового приложения, я снова искал новые подходы. И я нашел сначала Clean Architecture. Она мне понравилась. Основываясь на ее идеях я стал думать как организовать код в нашем приложении на GO. Тут мне попались несколько источников в итоге давших направление на компонентное деление. Можно еще делить по слоям, по функциям, но это все дает слишком много воли разработчиком, можно в одной фиче взять обратиться к хранилищу другой минуя, например, бизнес правила — это допустимо, но в будущем приводит к большой связанности и путанице.

Collapse )
Радость - весна

Стих для запоминания неправильных глаголов (детям понравится)

Чтобы не пугать детей таблицей неправильных глаголов, их количеством и тем фактом, что никаких способов их запомнить, кроме как зазубрить, не существует, предложите им почитать этот стих. Будет уже не так страшно это 100% :)

Я в буфете buy-bought-bought (покупать)
Первоклассный бутерброд,
За него я pay-paid-paid, (платить)
В классе в парту lay-laid-laid (класть)

Collapse )