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

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

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

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

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

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

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

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

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

Опубликовано: 25 ноября 2022 г. 17:01 | Автор: echodiv | Категория: Администрирование | 👁 663

Создание загрузочного диска стандартынми средствами Ubuntu

Небольшая шпаргалка по тому, как самым простым способом создать установочный диск на Ubuntu. Для того, чтобы сделать из обычной карты памяти установочный диск воспользуемся стандартными средствами. А именно df и dd.

  • df (disc free) - утилита для отображения всех файловых систем по имени устройств.  Так как будет нужно имя устройства, чтобы передать его в параметр утилиты dd, то это отличный вариант.
  • dd (dataset definition) - утилита для копирования блочных данных, она переносит по одному блоку указанного размера с одного места в другое. Можно сказать что это блочный cp.

Опубликовано: 5 ноября 2022 г. 21:51 | Автор: echodiv | Категория: Администрирование | 👁 607

Поиск по содержимому файлов в Linux

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

Для этого в Linux есть достаточно большой набор инструментов. Посмотрим на них.

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

Метки golang

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

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

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

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

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

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

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

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

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

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

 

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

 

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

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

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