Forwarded from Библиотека программиста | программирование, кодинг, разработка
git switch
— просто переключает веткуgit restore
— восстанавливает файл до последней зафиксированной версииgit sparse-checkout
— загружает в рабочую копию только подмножество файлов из большого репозиторияgit worktree
— управляет несколькими рабочими деревьями, связанными с одним репозиторием👉 Читать перевод & оригинал
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉16🥱5👍2❤1
Value receivers и nil
Представьте себе структуру с двумя методами: один использует pointer receiver, а другой — value receiver.
Что происходит, если receiver равен
Переменная
Однако, если мы выполняем этот код, вызов
📌 Что происходит?
Рассмотрим, что методы — это просто функции с некоторым синтаксическим сахаром. Метод
Таким образом, вышеуказанный код может быть переписан без методов следующим образом:
Теперь должно быть легко понять, почему
Для метода
Так что, если у вас есть тип с pointer/value receivers, будьте осторожны, чтобы не вызывать какие-либо методы для
#tip
Представьте себе структуру с двумя методами: один использует 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🥱6❤1
Реализация in-memory кэша на Go: пример с использованием дженериков и без
⚙️ map[string]interface
⚙️ Кэш со сроком действия (TTL)
⚙️ In-memory кэш с использованием дженериков
👉 Читать
⚙️ map[string]interface
⚙️ Кэш со сроком действия (TTL)
⚙️ In-memory кэш с использованием дженериков
👉 Читать
Mohitkhare
Mohit Khare
Learn about in-memory caching in Golang, it's benefits and how to implement it with and without generics with a TTL(expiry).
❤7❤🔥7🌚1
📌 Все как обычно:
☑️ разработчики настроены позитивно,
☑️ они верят, что команда 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
💬 Присылайте ссылку или просто напишите в комментах в стиле «был пост про …»👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱11🤔2👾1
Александр Павлов, сеньор Go-разработчик в СберМаркете, делится опытом ускорения Go-пайплайнов в PaaS.
👉 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍8❤1😁1
{{- /*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👍7❤1🔥1😁1
👍 — весь мой текущий проект — сплошной костыль
🤔 — нет, всегда стараюсь избегать костылей
🔥 — это часть рабочего процесса. Если сработает, можно выпилить костыль и написать код с нуля как следует
#холивар
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥110🤔60👍45
Спорная и часто обсуждаемая тема, но прежде чем отмахнуться от нее как от кликбейта, прочитайте причины автора 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. Введение в ООП. Наследование, абстракция, полиморфизм, инкапсуляция
Рассмотрим устройство механизма ошибок в 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👍6❤5🥱2
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
🔍💼 Исследование рынка: 8 наиболее востребованных языков программирования в 2024 году
Результаты исследования рынка IT-вакансий, проведенного DevJobsScanner. Были проанализированы 14 миллионов объявлений и выявлены 8 наиболее востребованных языков программирования.
Читать статью
#почитать
Результаты исследования рынка IT-вакансий, проведенного DevJobsScanner. Были проанализированы 14 миллионов объявлений и выявлены 8 наиболее востребованных языков программирования.
Читать статью
#почитать
🥱5👍2😁1
🤯 Ваш код хорошо написан, содержит множество тестов, выполняет надлежащую обработку ошибок, логирует свои действия, но вы все равно не можете выяснить, откуда берется эта ужасная ошибка, которая продолжает преследовать?
🫀Пришло время для операции на открытом сердце — отладки кода. Delve — отладчик для Go на основе CLI, адаптированный к модели конкурентности и рантайму. Он позволяет устанавливать точки останова, проверять горутины, а также оценивать переменные и манипулировать ими в режиме реального времени. Delve поддерживает удаленную отладку и легко интегрируется с основными IDE, включая VS Code.
👉 Читать гайд по работе с Delve
🫀Пришло время для операции на открытом сердце — отладки кода. Delve — отладчик для Go на основе CLI, адаптированный к модели конкурентности и рантайму. Он позволяет устанавливать точки останова, проверять горутины, а также оценивать переменные и манипулировать ими в режиме реального времени. Delve поддерживает удаленную отладку и легко интегрируется с основными IDE, включая VS Code.
👉 Читать гайд по работе с Delve
🥱9👍3❤2😁1