Библиотека Go-разработчика | Golang
23.3K subscribers
2.09K photos
42 videos
87 files
4.46K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
Forwarded from Библиотека программиста | программирование, кодинг, разработка
👩‍💻 Обзор сравнительно новых (и поэтому малоизвестных) команд Git, которые сделают вашу повседневную работу проще:

➡️ git switch — просто переключает ветку
➡️ git restore — восстанавливает файл до последней зафиксированной версии
➡️ git sparse-checkout — загружает в рабочую копию только подмножество файлов из большого репозитория
➡️ git worktree — управляет несколькими рабочими деревьями, связанными с одним репозиторием
➡️ и другие

👉 Читать перевод & оригинал
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉16🥱5👍21
Value receivers и nil

Представьте себе структуру с двумя методами: один использует pointer receiver, а другой — value receiver.


package main

type S struct {
N int
}

func (s *S) PointerRcv() {
}

func (s S) ValueRcv() {
}


Что происходит, если receiver равен nil?


func main() {
var s *S // s равно nil
s.PointerRcv()
s.ValueRcv()
}


Переменная s принимает нулевое значение типа *S, которое является nil. Поскольку ни один из методов не обращается к receiver'у, оба вызова метода должны пройти без проблем.

Однако, если мы выполняем этот код, вызов s.ValueRcv() вызовет панику!

📌 Что происходит?

Рассмотрим, что методы — это просто функции с некоторым синтаксическим сахаром. Метод func (s S) f() семантически идентичен функции func f(s S). Method receiver становится первым аргументом функции.

Таким образом, вышеуказанный код может быть переписан без методов следующим образом:


package main

type S struct {
N int
}

func PointerFunc(s *S) {
}

func ValueFunc(s S) {
}

func main() {
var s *S

PointerFunc(s)
ValueFunc(*s)
}


Теперь должно быть легко понять, почему ValueFunc() вызывает панику. Указатель s должен быть разыменован при передаче его в ValueFunc(). Разыменование nil указателя невозможно и приводит к панике.

Для метода func (s *S) PointerRcv(), receiver (или параметр функции во втором примере) не нуждается в разыменовании. Следовательно, паники не будет.

Так что, если у вас есть тип с pointer/value receivers, будьте осторожны, чтобы не вызывать какие-либо методы для nil значения этого типа.

#tip
👍49🥱61
Реализация in-memory кэша на Go: пример с использованием дженериков и без

⚙️ map[string]interface
⚙️ Кэш со сроком действия (TTL)
⚙️ In-memory кэш с использованием дженериков

👉
Читать
7❤‍🔥7🌚1
👩‍💻 Производительность Go с версии 1.0 до 1.22

Автор сравнивает производительность GoAWK (интерпретатор AWK с поддержкой CSV) при компиляции с использованием каждой выпущенной версии Go от 1.0 до 1.22.

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔9🔥8😁31👍1
👩‍💻 Результаты первого полугодия 2024 года в опросе Go-разработчиков

📌 Все как обычно:

☑️ разработчики настроены позитивно,
☑️ они верят, что команда Go поступает правильно,
☑️ многие считают, что Go отлично подходит для приложений с искусственным интеллектом.

💬 Что думаете на счет последнего?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🥱12🌚6🤩2
🔗 Разрабы, на какие статьи вы переходили или какие последние ссылки открывали из Telegram? Речь идёт не только о наших статьях и ссылках, а о любых.

💬 Присылайте ссылку или просто напишите в комментах в стиле «был пост про …»👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱11🤔2👾1
👩‍💻 Ускорение Go-тестов на CI

Александр Павлов, сеньор Go-разработчик в СберМаркете, делится опытом ускорения Go-пайплайнов в PaaS.

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍81😁1
👩‍💻 Кстати, GoLand умеет связывать Go template с типами приложения:
{{- /*gotype: package/path.type_name*/ -}}


Речь про механизм шаблонов, который разделен на два пакета: text/template и html/template. Они схожи по функциональности, с той разницей, что html/template позволяет генерировать защищенный от внедрения HTML-код. Кроме того, они помогают в написании кода в других приложениях, включая настройку Helm и менеджера пакетов Kubernetes .

👉 Подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍71🔥1😁1
💬 Любите костыли?

👍 — весь мой текущий проект — сплошной костыль
🤔 — нет, всегда стараюсь избегать костылей
🔥 — это часть рабочего процесса. Если сработает, можно выпилить костыль и написать код с нуля как следует

#холивар
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥110🤔60👍45
👩‍💻 Go — объектно-ориентированный язык программирования?

Спорная и часто обсуждаемая тема, но прежде чем отмахнуться от нее как от кликбейта, прочитайте причины автора David Wickes, почему он думает: «Go — очень объектно-ориентированный язык программирования. Думаю, даже больше, чем Java…»

👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🥱4
🏃 🏃 Самоучитель по Go для начинающих. Часть 11. Обработка ошибок. Паника. Восстановление. Логирование

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

👉 Читать гайд

📌 Остальные части в серии:

1. Особенности и сфера применения Go, установка, настройка
2. Ресурсы для изучения Go с нуля
3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста.
4. Переменные. Типы данных и их преобразования. Основные операторы
5. Условные конструкции if-else и switch-case. Цикл for. Вложенные и бесконечные циклы
6. Функции и аргументы. Области видимости. Рекурсия. Defer
7. Массивы и слайсы. Append и сopy. Пакет slices
8. Строки, руны, байты. Пакет strings. Хеш-таблица (map)
9. Структуры и методы. Интерфейсы. Указатели. Основы ООП
10. Введение в ООП. Наследование, абстракция, полиморфизм, инкапсуляция
🔥9👍65🥱2
👩‍💻 Microsoft запускает блог Go, который будет ориентирован на использование Go с Azure и вклад Microsoft в экосистему Go в целом.

👉 Подробнее

#новости
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23😁13🤔4🥱3🌚2
🧰 Huma — современный, простой, быстрый и гибкий микрофреймворк для создания HTTP REST/RPC API на Go, поддерживаемый OpenAPI 3 и JSON Schema.

👉 GitHub & Сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥4🥱3
🔍💼 Исследование рынка: 8 наиболее востребованных языков программирования в 2024 году

Результаты исследования рынка IT-вакансий, проведенного DevJobsScanner. Были проанализированы 14 миллионов объявлений и выявлены 8 наиболее востребованных языков программирования.

Читать статью

#почитать
🥱5👍2😁1
🤯 Ваш код хорошо написан, содержит множество тестов, выполняет надлежащую обработку ошибок, логирует свои действия, но вы все равно не можете выяснить, откуда берется эта ужасная ошибка, которая продолжает преследовать?

🫀Пришло время для операции на открытом сердце — отладки кода. Delve — отладчик для Go на основе CLI, адаптированный к модели конкурентности и рантайму. Он позволяет устанавливать точки останова, проверять горутины, а также оценивать переменные и манипулировать ими в режиме реального времени. Delve поддерживает удаленную отладку и легко интегрируется с основными IDE, включая VS Code.

👉 Читать гайд по работе с Delve
🥱9👍32😁1