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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
👩‍💻 GoLand: путеводитель по основным фичам популярной IDE

✔️ Редактор кода
✔️ Встроенные инструменты и интеграция
✔️ Фронтенд и бэкенд
✔️ Экосистема плагинов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱27🔥12👍5
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