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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
#video #beginner

Если вы соскучились по интересным заданиям и практическим упражнениям, в этом курсе они есть. Например, вы научитесь работать с авторизацией, СУБД PostgreSQL, MVC, REST и многим другим.

https://bit.ly/2RIBtTf
#beginner

Полный обзор на создание веб-приложений на Go.

https://prglb.ru/4xpx1
#beginner #web

Небольшой онлайн-туториал по основам создания веб-приложений на Go. Вы узнаете про роутинг, основы Request/Response, обработку форм и многое другое.

https://gowebexamples.com/
#beginner

Основы Go для самых начинающих. Вы узнаете, что такое Go, какие у него особенности, где часто применяется и многое другое.

https://prglb.ru/4up53
#patterns #beginner

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

https://prglb.ru/4eu96
https://prglb.ru/1opdp
#beginner #regex

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

https://github.com/StefanSchroeder/Golang-Regex-Tutorial
#beginner

Большой список полезных ссылок на ресурсы по изучению Go с нуля.

https://prglb.ru/49eyf
#beginner

Понимание структур данных в Golang
Golang приобрел огромные возможности в разработке программного обеспечения за несколько лет после его запуска.

#статьядня
https://prglb.ru/2t43p
Размер типа структуры без полей ненулевого размера равен нулю. Размер типа массива, длина которого равна нулю или размер элемента которого равен нулю, также равен нулю. Это можно доказать с помощью примера выше.

В Go размеры часто обозначаются как значения int. Это означает, что максимально возможная длина массива равна MaxInt, значение которой равно 2^63-1 в 64-битных ОС. Однако длина массивов с ненулевыми размерами элементов жестко ограничена стандартным компилятором Go и рантаймом.

📌 Например👇

var x [1<<63-1]struct{} // okay
var y [2000000000+1]byte // compilation error
var z = make([]byte, 1<<49) // panic: runtime error: makeslice: len out of range


#tip #go #beginner
Мы можем использовать цикл for-range для моделирования циклов for i in 0..N в некоторых других языках, как показано на примере выше.

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

#tip #go #beginner
#tip #go #beginner

💡 Указатели на массивы могут использоваться как массивы в нескольких ситуациях

📌 Пример слева компилируется и работает нормально, тогда как в примере справа третий for вызывает панику.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#tip #go #beginner

О случайном порядке итерации типа map

Встроенные мапы Go не поддерживают порядок входных значений. Поэтому при использовании цикла for-range для итерации записей мапы порядок записей рандомизируется. Запустив код из примера, вы увидите, что результаты могут отличаться.

Но обратите внимание, что функции вывода на экран в стандартном пакете fmt сортируют записи (по ключам) мапы. То же самое происходит с выводами вызовов функции json.Marshal.
#tip #go #beginner

Использование ссылки на переменную итератора цикла

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

Values: 3 3 3
Addresses: 0x40e020 0x40e020 0x40e020


На каждой итерации мы добавляем адрес i к срезу out, но поскольку это одна и та же переменная, мы добавляем тот же адрес, который в итоге содержит последнее значение, присвоенное i. Одно из решений — скопировать переменную цикла в новую переменную:

for i := 0; i < 3; i++ {
i := i
out = append(out, &i)
}


Новый вывод программы — это то, что ожидалось:

Values: 0 1 2
Addresses: 0x40e024 0x40e028 0x40e032


Строка i := i копирует переменную цикла i в новую переменную, ограниченную блоком тела цикла for, также называемым i. Адрес новой переменной — это тот, который добавляется к массиву. В каждой итерации цикла создается новая переменная.

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

Values: [[3] [3] [3]]