Библиотека 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 Библиотека программиста | программирование, кодинг, разработка
💻 Подборка вопросов от Кирилла Мокевнина, которые имеет смысл задать на собесах для проверки уровня разработчика и навыков решения прикладных задач (типовых для веба)

👉 Читать остальные вопросы

💬 Веб-разработчики, как вам?
👍13🥱13🤔5🔥1
👩‍💻 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