XZTVC.ru | Еще один блог разработчика

Опубликовано: 27 февраля 2023 г. 14:36 | Автор: echodiv | Категория: Разработка | 👁 548

Создание временного файла и временной директории в Golang

Go в своей стандартной библиотеке предоставляет инструменты для создания временного файла и временной директории. Для этого можно использовать пакет "os", в котором есть функции MkdirTemp и CreateTemp. Но для удаления временного файла и директории нужно явно указать их удаление для этого можно использовать os.RemoveAll и os.Remove соответственно.

Опубликовано: 5 декабря 2022 г. 7:21 | Автор: echodiv | Категория: Разработка | 👁 500

Организация SQL кода с использованием шаблонов Go

Как организовать хранение SQL кода внутри проекта? В интрнете можно найти несколько вариантов:

  • Использовать файлы
  • Использовать константы
  • Использовать хранимые процедуры и представления
  • Использовать порождающие шаблоны
  • Использовать ORM

Мне больше всего нравится второй вариант - хранить запросы в константах внутри кода. Но, честно говоря, необходимости в другом подходе у меня не было. А с использованием шаблонов Go хранение запросов в константах становится крайне удобным. Да, шаблоны можно хранить и в файлах. Но поставлять продукт вместе с файлами, достуаными для редактирования не лучшая идея. Шаблон может сильно отличаться от финального варианта запроса и редактирование его без полного понимания, как он будет обработан не лучшая идея.

Опубликовано: 20 октября 2022 г. 22:52 | Автор: echodiv | Категория: Разработка | 👁 1366

Метки golang

Метки в го используются в операторах continue, break как необязательны парамеры и как обязательный аргумент для оператора goto.
Предельная область видимости метки ограничивается областью видимости функции в которой она обозначена.
 
Посмотрим где и как можно применять метки в golang.

Опубликовано: 25 сентября 2022 г. 21:30 | Автор: echodiv | Категория: Разработка | 👁 1157

Структурные теги в golang

В данной статье разберём что такое структурные теги (struct tag) и как их готовить.
В общих словах структурные теги - это элемент магии Go, который делает поведение вашего кода менее явным.
На них можно повесить какую-то логику обработки структур, как, например, сериализация в json. Указав их для полей структуры.
 
Тег внутри структуры выглядит следующим образом:
type S struct {
    Field int `tagname:"uno,dos"`
}
 
Где S - имя структуры, содержащей одно поле "Field". В свою очередь, поле имеет тег tagname со значением "uno,dos".
Имя поля не обязательно должно быть публичным, то есть начинаться с большой буквы, чтобы код, который будет обрабатывать теги имел доступ к полю.

Опубликовано: 24 июля 2022 г. 1:39 | Автор: echodiv | Категория: Разработка | 👁 487

Пишем middleware для стандартных net/http хэндлеров

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

Представим, что нам нужно написать веб-сервер на стандартном Go пакете net/http. Как же можно реализовать middleware?  

Опубликовано: 23 июля 2022 г. 23:10 | Автор: echodiv | Категория: Разработка | 👁 2839

Тестирование в GO с использованием "моков"

Важной частью создания програмного обеспечения является покрытие кодовой базы тестами.

 

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

 

Естественно, для этого придумали "моки". Придумали не только их, но в данной статье речь пойдет только про моки и немного про кодогенерацию, не писать же их руками. 

Опубликовано: 12 июля 2022 г. 21:30 | Автор: echodiv | Категория: Разработка | 👁 707

Удалить __pycache__, pyc, pyo файлы после исполнения python программы

После исполнения python программы исходный код компилируется в байт-код для ускорения выполнения программы при повторном вызове.

Иногда это может стать проблемой. Преположим, при деплое какого-нибудь сервиса руками, после выполнения тестов на локальной машине. Без гита, без CD. Иногда так проще.

Как лучше всего удалить все папки __pycache__ и файлы .pyc/.pyo?

Опубликовано: 30 июня 2022 г. 19:20 | Автор: echodiv | Категория: Разработка | 👁 633

Типы данных в Go

Любые данные на компьютере хранятся в виде битов. Это те самые нули и единицы. И именно от типа данных будет зависеть как программа будет интерпретировать эти данные. 

Например: один символ в Go представляет собой набор битов с типом rune.  Если мы выполним следующий код

 

package main
 
import "fmt"
 
func main() {
	var a rune = 'A'
	fmt.Println(a)
}

 

То увидим не "А", а 65, потому что Go так решил, собственно если мы поменяем rune на int ничего не поменяется. Мы отдали символ, а получили число.

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

Так какие же типы данных есть в Go?

Опубликовано: 19 мая 2022 г. 21:10 | Автор: echodiv | Категория: Разработка | 👁 1101

Оптимизация структур в GO выравниванием

Вычислительные мощности растут, компьютеры выполняют всё более сложные задачи, оперируют огромными объёмами памяти.

Методы оптимизации работы с памятью становятся всё более высокоуровневыми, но не стоит забывать о простых старых методах, таких как выравнивание структур в памяти.

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

Опубликовано: 11 мая 2022 г. 19:32 | Автор: echodiv | Категория: Разработка | 👁 598

Добавление favicon.ico в Django

Favicon (сокр. от англ. FAVorite ICON — «значок для избранного») — значок веб-сайта или веб-страницы. Отображается браузером во вкладке перед названием страницы, и в качестве картинки рядом с закладкой, а также в адресной строке в некоторых браузерах. (c) wikipedia.org

Каждый веб-сайт должен иметь иконку, которая передаёт настроение сайта (или нет), большинство браузеров ожидает найти favicon.ico в корневом каталоге вашего веб-сайта (/favicon.ico). Самый простой способ использовать статические файлы, но в Django обычно мы используем поддиректорию для доступа к ним (/static).

В этом руководстве мы настроим Django для отображения favicon.ico.