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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Golang Библиотека - канал для скачивания Golang книг на русском и английском языке.

Что в нашем канале:
1. Книги по GO, которые помогут вам пройти собеседование на позицию Golang Developer.

2. Все книги на русском языке

3. Все книги можно скачать в 2 клика

4. Всё, никакой другой воды.

Подписывайтесь и скачивайте: @golangsbook
😁4👍1
⤵️ Сократите объем ресурсов и производительность сравнения с помощью нового пакета unique в Go 1.23

Интернирование (англ. interning), термин, изначально введенный Lisp, представляет собой процесс хранения только одной копии значения в памяти и совместного использования уникальной ссылки на нее вместо выделения нескольких копий и пустой траты памяти.

Например, компилятор Go уже выполняет интернирование строковых констант во время компиляции, поэтому вместо выделения нескольких идентичных строк он выделит один экземпляр строки и совместно использует ссылку на него, как показано на первом скрине.

До Go 1.23 интернирование значений времени выполнения было доступно только через сторонние пакеты. Однако, начиная с Go 1.23, интернирование теперь включено в стандартную библиотеку через новый пакет unique. Go-разработчик Joseph Woodward демонстрирует преимущества нового пакета.
👍19🥰32❤‍🔥1
🔥 Go 1.23 за 23 минуты — бесплатный мини-курс от Matt Boyle, включающий все ключевые моменты новой версии языка.

☑️ Вы узнаете про:
• Итераторы. Что это такое и что вам нужно знать?
• Изменения в пакетах slice и map.
• Как новый пакет unique может помочь оптимизировать использование памяти.
• В чем заключается новое изменение телеметрии и как его можно (по желанию) включить.
👍20👾41🥱1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🚀 Ускорьте свою базу данных: 7 проверенных методов масштабирования и оптимизации

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

🔗 Читать статью
🔗 Зеркало
😁142👍2
🤔 Как меняется математика в разных индустриях: от мобильных игр к фондовым рынкам

🗓 22 августа в прямом эфире разберем как математика применяется в разных отраслях бизнеса. И какие математические навыки необходимы для успешной работы в каждой из них.

Приглашенный спикер: Павел Запольский – Senior Quantitative Researcher at Exness и Co-founder GrowLytics. Запустивший более 10 проектов по машинному обучению и анализу данных для ведущих компаний.

😮 На вебинаре узнаете:

🔵 Математика в бизнесе: Чем отличаются разные сферы друг от друга. Почему стоит понимать специфику сферы
🔵 ML и продуктовое IT: Чем различается математическая сложность от индустрии к индустрии. Какие к ним необходимы уровни подготовки
🔵 Баевская математика в GameDev. Баевская математика как альтернатива AB тестированию. Как математические методы применяются в разработке игр
🔵 Finance: Что такое количественные финансы и математическое моделирование. Обсудим текущие индустриальные тренды в отрасли
🔵 Backtest: Как знания математики делают ваши активы более надежными
🔵 На практике подробно разберем два математических кейса по GameDev и Backtest.

➡️ Зарегистрироваться: https://proglib.io/w/ae5dc67e
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁51
💡 Кстати, в Go 1.23 представлена ​​новая функция Chunk, которую можно использовать для разделения слайса на подслайсы.

▶️ Вывод:

Product list 0 [TV Fridge]
Product list 1 [Washing Machine Dish Washer]
👍64😁7🤔5🔥4👏2
🔥 Объяснение Go maps: как на самом деле хранятся пары ключ-значение

Очередной лонгрид от Phuong Le, который на простых иллюстрациях объясняет не самые простые аспекты Go. Этот гайд посвящен типу map и всему, что с ним связано.

👉 Читать
👍42🔥7👾1
🔧 Компилятор своими руками: краткий гид для начинающих

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

🔗
Ссылка на статью
👍6🥱3
🛠️💥 Использование Go для всего

Зачем использовать 10 инструментов, если можно освоить один? Познакомьтесь с соло-разработчиком Маркусом, который превратил Go в свой швейцарский армейский нож. От CLI до игр для Nintendo Switch — Go делает все!

👉 Читать
👍19😁2💯1
Вы наверняка знакомы со «стандартным» способом ветвления кода в зависимости от заданного значения:


switch a {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
default:
fmt.Println("default")
}


Так работает switch в Go и во многих других языках (за исключением того, что в Go не происходит перехода к последующим case).

Но оператор switch может делать больше. Вот несколько кейсов.

1. Несколько значений в одном case.

В case можно указать несколько значений для сопоставления:


switch a {
case 1:
fmt.Println("1")
case 2, 3, 4:
fmt.Println("2, 3 или 4")
// case 1,2: // ошибка: дублирование case 1, дублирование case 2
// fmt.Println("1 или 2")
}


Заданное значение может использоваться только в одном блоке case. Дублирование значений в case вызовет ошибку.

2. Инициализатор, как в цикле for.

Вы можете инициализировать значение перед использованием его в switch. Область видимости переменной a ограничена конструкцией switch:


switch a := f(); a {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
}


3. Нет выражения switch, но есть выражения case.

case не ограничен статическими значениями. Если вы опустите выражение switch, вы можете использовать выражения для каждого case:


switch {
case a == 1:
fmt.Println("1")
case a >=2 && a <= 4:
fmt.Println("2")
case a <= 5:
fmt.Println("3")
}


Если текущее значение a совпадает более чем с одним case, выбирается первый подходящий.

4. Переключение по типу переменной.

Если ваш код получает значение интерфейса из какого-то источника, вы можете использовать переключение по типу, чтобы проверить фактический тип этого значения:


switch v := a.(type) {
case int:
fmt.Println("a — это int:", v)
case string, []byte:
fmt.Println("a — это string:", v)
}


5. Переключение по типу параметра.

Это может показаться немного эзотерическим: вы можете определить дженерик функцию, где типовой параметр не используется в списке параметров. Вместо этого оператор switch может ссылаться на этот параметр, чтобы проверить значение параметра:


func do[T comparable](a any) {
switch v := a.(type) {
case int:
fmt.Println("a — это int:", v)
case T:
fmt.Printf("a — это %T: %v", v, v)
case []T:
fmt.Println("a — это срез:", v)
case []byte:
fmt.Println("a — это срез байт:", v)
}
}

func main() {
do[bool](a)
do[bool](true)
do[int]([]int{1, 2, 3})
}


Как и с выражениями case, если фактический тип a совпадает с несколькими case, выбирается первый подходящий.

👉 Go Playground

#tip
👍607🥱5🔥3😍1