Golang Дайджест
8.01K subscribers
44 photos
1 file
171 links
Самое интересное из мира Go: новости, статьи, проекты, сервисы, изменения в языке и др.

Посты публикуются не часто - только самое важное, с чем я лично ознакомился.

Поэтому можно не мьютить канал =)

Обратная связь: @justskiv
Download Telegram
Первый коммит в git-репозиторий Go был сделан в 1972 году Брайаном Керниганом

Первый коммит и правда датируется 1972 годом:

main( ) {
extrn a, b, c;
putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';

Следующим идет коммит 1974 года, конвертирующий предыдущий в язык C.

Следующие два в 1988: первый конвертируют код в ANSI C, во втором приезжает мелкий фикс к первому.

После этого Роберт Грейсмер начинает работать над спецификацией Go в 2008.

По этой ссылке можно посмотреть на историю этих коммитов визуально.

Забавно, что сам git официально появился лишь в 2005 году.

Как это возможно? В git вы можете устанавливать дату своего коммита как угодно. Возможно, Брайан (или кто-то другой) таким образом хотел подчеркнуть тот факт, что идеи языка Go зародились в 1972 году. Для сравнения, язык C разрабатывался в 1969—1973 годах.

Источник
😁8🔥5🤔4👍3
Подробный разбор типа Map в Go

Что разбирается в видео:
- Структуры, реализующие Map и их исходный код: заголовок мапы (hmap), структура бакетов, type descriptor и др.
- Операция поиска значения и её исходный код
- Процессы, происходящие в Map: рост мапы, эвакуация данных, переполнение бакета
- Во что преобразуются базовые операции над мапой и как они обходятся без дженериков?

Как результат, мы получаем ответы на важные вопросы:
- Зачем и как заранее аллоцировать под мапу память?
- Почему нельзя взять указатель на элемент мапы?
- Почему порядок обхода мапы случайный?
- Почему при этом вывод fmt.Println(map) фиксированный?
- Как растёт мапа при заполнении?

#video #map #детали_реализации #тонкости_go

https://youtu.be/P_SXTUiA-9Y
🔥15👍8
История создания Гофера - маскота Golang 💙

На мой взгляд, это самый удачный и популярный маскот IT-технологии.

Интересно, что впервые Гофер был нарисован задолго до создания самого Go.

https://go.dev/blog/gopher

#gopher #mascot #history
5🔥3👍2🤔1
Разбор интересных нововведений в Go 1.19

Автор не просто выделил интересные моменты, но и попытался подробно их разжевать, объясняя основную суть и мотивацию авторов.

О чем пойдет речь:

- Область действия типов в объявлениях методов
- Модель памяти
- Новые типы в пакете sync/atomic
- Soft Memory Limit
- Оптимизация
- Прочие минорные изменения

В целом версия 1.19 не внесла каких-то больших и значимых изменений в Go по сравнению с 1.18. В статье опущена часть минорных трансформаций. С их полным списком можно ознакомиться на странице релиза 1.19. Так как официальный релиз намечен на август, можно предположить, что ещё какие-то изменения обязательно появятся.

https://habr.com/ru/company/ozontech/blog/674190/
👍9🔥21
go-git - реализация Git на Go

Это не просто клиент, а полноценная реализация на чистом Go.
Она создана для удобной интеграции Git в сервисы, написанные на Go.

go-git ориентирован на расширяемость, совместимость и поддерживает большинство подключаемых API, которые описаны здесь.

Пример использования:

_, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{
URL: "https://github.com/go-git/go-git",
Progress: os.Stdout,
})

————
Counting objects: 4924, done.
Compressing objects: 100% (1333/1333), done.
Total 4924 (delta 530), reused 6 (delta 6), pack-reused 3533

В результате, мы получаем экземпляр Repository и можем делать с ним всякое:

// получаем ветку по указателю HEAD
ref, err := r.Head()

// получаем объект коммита по указателю ref
commit, err := r.CommitObject(ref.Hash())

// получаем историю коммита
history, err := commit.History()

// проходим по коммитам и выводим каждый из них
for _, c := range history {
fmt.Println(c)
}

Чуть больше информации см. здесь.
🔥4🤔3
GoGetPodcast #3: GameDev в Go

http://tuzov.link/gogetpodcast3

Обсудили вопросы, связанные с геймдевом на Go: подходит ли Go для геймдева? Какие основные плюсы и минусы? На какие игровые движки стоит обратить внимание? И др.

В гостях были Искандер Шарипов и Алексей Акулович, которые увлекаются разработкой игр на Go в качестве хобби.
Глеб Яльчик, постоянный участник подкаста, работает в геймдеве, и имеет в этой области огромный опыт.

#gogetpodcast
🔥8👍32
Небольшая статья про кодогенерацию в Go

https://habr.com/ru/company/sbermarket/blog/676486/

Представляет из себя подборку популярных инструментов и подходов для кодогенерации с кратким пояснением происходящего.

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

Список инструментов:

- Для создания проекта: buffalo, beego.
- Для создания веб-сервера и клиента по спецификации: swag, go-swagger, oapi-codegen, openapi-generator.
- Для генерации метрик: gowrap.
- Для создания моков: mockery, gomock.
- Для инициализации графа зависимостей: wire.
- Для запуска генераторов одной строкой: go generate.

#article #code_generation #compilation
👍14👎1
Почему важно хорошо оформлять Pull Request'ы и коммиты

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

#статья #разработка
👍92
Видео про внутреннее устройство каналов в Go

В видео разобрано:
- как как реализована потокобезопасноть каналов
- как в буферизированном канале хранятся данные
- какие интересные оптимизации там есть
- как работает оператор Select
- как каналы закрываются и др.

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

https://www.youtube.com/watch?v=ZTJcaP4G4JM

#видео #детали_реализации #channels
26🔥11👍8
GoGetPodcast #4: собеседование Go-разработчика глазами нанимателя

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

- Берут ли на работу новичков?
- Зачем на собеседованиях нужны алгоритмы и live-coding?
- Достаточно ли скинуть ссылку на pet-project на GitHub'е?
- Играет ли роль высшее образование?
- Играет ли роль возраст?
и др.

Выпуск доступен на всех площадках, ссылки тут.

#gogetpodcast #podcast
🔥14👍21
Learn X in Y minutes, where X=Go

https://learnxinyminutes.com/docs/go/

Ещё один интересный способ быстро познакомиться с Go. Подходит для людей, которые уже умеют программировать на другом языке. Но это даже быстрее, чем Tour of Go!

Мои комментарии тут излишни, просто взгляните своими глазами.

Есть русскоязычный вариант, но он выглядит чуть менее актуальным.

Кроме Go, на сайте разобрано множество других языков. Например, JSON и Си.

#study #article
🔥11
Как устроена функция time.Sleep() в Go?

Каждый из вас наверняка пользовался этой функцией, заставляющей горутину немного подождать. Но заглядывали ли вы ей под капот?

В этой статье предлагается туда заглянуть.

#article #internals
👍17🔥3
Официальный гайд по GoDoc-комментам

Мало кто знает, но такой гайд существует. Если хочешь стать godoc-мастером, очень рекомендую. Коллеги будут очень благодарны.

Здесь подробно разобрано:

- что такое godoc
- в каких случаях стоит писать такие комменты (спойлер - every exported name should have a doc comment)
- как их правильно писать в разных случаях (для типов, функций, констант, переменных и т.п.)
- как всё это форматировать

Всё разобрано очень подробно, приводится множество примеров.

#article #godoc #codestyle
👍93🔥3
GoGetPodcast #5: правила хорошего тона для разработчика

В выпуске обсуждаются вопросы, связанные с написанием хорошего кода в Go: нужен ли он? Насколько важен? Экономит ли "грязный код" время? Как научиться писать хороший код? И др.

Есть видео-вариант на YouTube и аудио-вариант на всех площадках подкастов, ссылки тут.

#gogetpodcast
🔥15👍83🤯1
🤔7👍6🔥31
GoGetPodcast #6: монорепозиторий vs мультирепозиторий

Будем обсуждать плюсы и минусы монорепозитория. Это частая тема холиваров, и мы решили внести свой вклад 😊

Когда и где: уже завтра (15.11), в 09:30 утра. Трансляция будет на моём YouTube-канале, запись чуть позже появится там же.

Участники:
- Глеб Яльчик - тех. директор компании Gaijin,
- Алексей Акулович - inDriver (ранее Tinkoff, ВКонтакте)

#gogetpodcast #анонс
🔥9👍3
Как сделать программу на Go быстрее на в х1.7 раз, изменив один символ

Хорошая короткая статья, которая лишний раз напоминает о том, что:

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

На хабре есть перевод на русский.

#article #optimisation
👍17