Кажется, этот формат значительно удобнее, чем смотреть весь плейлист в поисках чего-то полезного. Вас ждет краткое описание докладов на следующие темы:
1⃣Rubiks-Kube
2⃣Is unit testing an afterthought or a necessity?
3⃣Generics in Go
4⃣Metaprogramming in Go
5⃣Fuzz testing
6⃣Cache design patterns
7⃣Checkpoint Restoration Using CRIU
8⃣Dive into debugging distributed systems using Delve
9⃣Hardening Go Concurrency: using Formal methods to verify correctness
Please open Telegram to view this post
VIEW IN TELEGRAM
AdiTechSavvys Blogs on Golang
Gophercon India 2023
A blog highlighting my learnings from GCI2023. With details about the Talks that took place.
🔥9👍1
🔗Cокращатель ссылок на Go: с нуля до деплоя
Go-разработчик Ильдар Карымов делится опытом разработки просто проекта на Go. Вы узнаете, как на практике использовать Echo и MongoDB, прикрутить GitHub-аутентификацию и задеплоить на Digital Ocean.
📺 Смотреть
Go-разработчик Ильдар Карымов делится опытом разработки просто проекта на Go. Вы узнаете, как на практике использовать Echo и MongoDB, прикрутить GitHub-аутентификацию и задеплоить на Digital Ocean.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Forwarded from Библиотека Go для собеса | вопросы с собеседований
💬Что из себя представляет паттерн «Функциональные опции» в Go и как его реализовать?
▪️Паттерн «Функциональные опции» в Go предлагает гибкий способ настройки структур без раскрытия внутренних полей.
▪️Он особенно полезен, если вы хотите предоставить дополнительную конфигурацию, или в будущем могут появиться дополнительные параметры конфигурации. Он также отлично подходит для библиотек.
📌Базовый пример без функциональных опций:
▪️Со временем наши требования меняются, и нам может понадобиться поддерживать больше вариантов конфигурации. Вместо изменения сигнатуры функции
👉 Сначала мы определяем функциональную опцию:
👉 и функцию, удовлетворяющую типу:
👉 изменяем нашу функцию NewServer:
👉 и теперь мы можем делать вот так:
📌Этот паттерн позволяет нам гибко настраивать параметры, сохраняя при этом читабельность и не раскрывая внутренние поля.
▪️Паттерн «Функциональные опции» в Go предлагает гибкий способ настройки структур без раскрытия внутренних полей.
▪️Он особенно полезен, если вы хотите предоставить дополнительную конфигурацию, или в будущем могут появиться дополнительные параметры конфигурации. Он также отлично подходит для библиотек.
📌Базовый пример без функциональных опций:
type Server struct {
host string
port int
protocol string
}
func NewServer(host string, port int) *Server {
return &Server{
host: host,
port: port,
protocol: "http",
}
}
▪️Со временем наши требования меняются, и нам может понадобиться поддерживать больше вариантов конфигурации. Вместо изменения сигнатуры функции
NewServer
, что может быть проблематично и несовместимо с предыдущими версиями, мы можем использовать функциональные опции.👉 Сначала мы определяем функциональную опцию:
type ServerOption func(*Server)
👉 и функцию, удовлетворяющую типу:
func WithPort (port int) ServerOption {
return func(s *Server) {
s.port = port
}
👉 изменяем нашу функцию NewServer:
func NewServer(host string, opts ...ServerOption) *Server {
server : = &Server{
host: host,
port: 443,
protocol: "https"
}
for _, opt : = range opts {
opt (server)
}
return server
}
👉 и теперь мы можем делать вот так:
server1 := NewServer("localhost")
server2 := NewServer("localhost", WithPort(8080))
📌Этот паттерн позволяет нам гибко настраивать параметры, сохраняя при этом читабельность и не раскрывая внутренние поля.
❤37🔥21👍10🌚3😁1
Какие из перечисленных хард скиллов, по вашему мнению, наиболее важны для разработчика? Можно выбрать несколько вариантов.
Anonymous Poll
53%
Знание языков программирования
66%
Понимание алгоритмов и структур данных
51%
Работа с базами данных и SQL
35%
Опыт работы с системами контроля версий
26%
Опыт работы с фреймворками и библиотеками
18%
Понимание принципов DevOps
67%
Знание основных принципов проектирования и архитектуры ПО
23%
Опыт тестирования ПО
12%
Знание математики
4%
Свой вариант (напишу в комментарии)
🧠Решаем задачи по Go и практикуемся на квизах
Напоминаем, что у нас появился новый канал с задачами по Go, квизами и кодом. Подписывайтесь, чтобы практиковаться вместе с нами.
👉Перейти в канал
Напоминаем, что у нас появился новый канал с задачами по Go, квизами и кодом. Подписывайтесь, чтобы практиковаться вместе с нами.
👉Перейти в канал
👍3😁1
Go 1.21 включает предварительную версию изменения области видимости цикла for, которое команда Go планирует добавить в Go 1.22, устраняя одну из наиболее распространенных ошибок Go.
🤔 В чем сыр-бор?
• На первом скрине код должен вывести "a,b,c", верно?
• На самом деле мы получаем "c,c,c". Причины такого поведения описаны здесь.
• Эту проблему также можно воспроизвести без конкурентности (второй пример).
• Ошибка такого рода вызвала проблемы в проде у многих компаний, включая публично задокументированную проблему в Lets Encrypt.
📌В Go 1.22 команда Go планирует измененить циклы for, чтобы они имели область видимости для каждой итерации, а не для каждого цикла.
• Чтобы обеспечить обратную совместимость с существующим кодом, новая семантика будет применяться только в пакетах, содержащихся в модулях, которые объявляют go >= 1.22 в файлах go.mod.
• Go 1.21 включает предварительный просмотр изменения области видимости. Если вы скомпилируете свой код с переменной окружения GOEXPERIMENT=loopvarset, новая семантика будет применена ко всем циклам.
• На первом скрине код должен вывести "a,b,c", верно?
• На самом деле мы получаем "c,c,c". Причины такого поведения описаны здесь.
• Эту проблему также можно воспроизвести без конкурентности (второй пример).
• Ошибка такого рода вызвала проблемы в проде у многих компаний, включая публично задокументированную проблему в Lets Encrypt.
📌В Go 1.22 команда Go планирует измененить циклы for, чтобы они имели область видимости для каждой итерации, а не для каждого цикла.
• Чтобы обеспечить обратную совместимость с существующим кодом, новая семантика будет применяться только в пакетах, содержащихся в модулях, которые объявляют go >= 1.22 в файлах go.mod.
• Go 1.21 включает предварительный просмотр изменения области видимости. Если вы скомпилируете свой код с переменной окружения GOEXPERIMENT=loopvarset, новая семантика будет применена ко всем циклам.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
💯20🤔8👍6🔥5
Go-разработчик Ильдар Карымов делится опытом разработки Telegram-бота, который автоматически достаёт свежие новости и статьи про Go из разных источников, генерирует для них саммари с помощью ChatGPT, после чего публикует их в Telegram-канал.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍2😁1
Таненбаум vs Торвальдс (микроядро vs монолит)
Старый добрый профессиональный спор, который перерос в холивар. Первыми его начали известные разработчики Эндрю Таненбаум и Линус Торвальдс в начале 90-х в одной из новостных групп «Юзнета».
Таненбаум и Торвальдс холиварили из-за архитектуры ядра ОС. Первый утверждал, что лучше использовать микроядра, второй — монолитное ядро. И сколько раз они не возвращались к публичному обсуждению архитектуры ядра, каждый оставался при своём мнении.
А что сейчас? Да ничего не изменилось. Холивар разгорается при обсуждении абсолютно любой темы.
Любите холиварить?
👍 — конечно — в споре рождается истина
🤔 — ненавижу — только мешает работать
💯 — смотря где и при каких обстоятельствах
#холивар
Старый добрый профессиональный спор, который перерос в холивар. Первыми его начали известные разработчики Эндрю Таненбаум и Линус Торвальдс в начале 90-х в одной из новостных групп «Юзнета».
Таненбаум и Торвальдс холиварили из-за архитектуры ядра ОС. Первый утверждал, что лучше использовать микроядра, второй — монолитное ядро. И сколько раз они не возвращались к публичному обсуждению архитектуры ядра, каждый оставался при своём мнении.
А что сейчас? Да ничего не изменилось. Холивар разгорается при обсуждении абсолютно любой темы.
Любите холиварить?
👍 — конечно — в споре рождается истина
🤔 — ненавижу — только мешает работать
💯 — смотря где и при каких обстоятельствах
#холивар
💯70👍38🥱16🤔11
Profiling_Go_Applications_in_the_Right_Way_with_Examples_by_Abdulsamet.pdf
5.5 MB
Правильное профилирование приложений с примерами: гайд для Go-разработчика
Профилирование — важный метод анализа приложений и выявления узких мест, снижающих производительность приложения.
Узнайте, как определить, какие части кода выполняются слишком долго или потребляют слишком много ресурсов.
👀 Читать
Профилирование — важный метод анализа приложений и выявления узких мест, снижающих производительность приложения.
Узнайте, как определить, какие части кода выполняются слишком долго или потребляют слишком много ресурсов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
🤔 Конкурентность — это не параллелизм
Перед вами полное изложение доклада Роба Пайка Concurrency is Not Parallelism. Иллюстрации и диаграммы воссозданы, исходный код взят дословно со слайдов, за исключением комментариев, которые в некоторых местах были расширены.
🤩 Читать
Перед вами полное изложение доклада Роба Пайка Concurrency is Not Parallelism. Иллюстрации и диаграммы воссозданы, исходный код взят дословно со слайдов, за исключением комментариев, которые в некоторых местах были расширены.
🤩 Читать
👍15🔥4
Ловите плейлист с мини-лекциями от Go-разработчика Ильдара Карымова или смотрите интересующую тему отдельно:
🌐 Тесты: что нужно знать разработчику
🌐 Всё про конкурентность в Go
🌐 Туториал по дженериками Go
🌐 Golangci-lint: повышаем качество кода на Go
🌐 Туториал по интерфейсам в Go
🌐 Завершаем программы изящно: graceful shutdown в Go
🌐 Туториал по работе с пакетом Context в Go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22💯2🌚1
Это не реклама, а обзор книги «Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы, 3-е изд.»
Третье издание «Golang для профи» исследует практические возможности Go и описывает такие продвинутые темы, как конкурентность и работа сборщика мусора Go, использование Go с Docker, разработка мощных утилит командной строки, обработка данных в формате JSON и взаимодействие с базами данных.
Кроме того, книга дает дополнительные сведения о работе внутренних механизмов Go, знание которых позволит оптимизировать код на Go и использовать типы и структуры данных новыми и необычными способами.
👀 Читать
Третье издание «Golang для профи» исследует практические возможности Go и описывает такие продвинутые темы, как конкурентность и работа сборщика мусора Go, использование Go с Docker, разработка мощных утилит командной строки, обработка данных в формате JSON и взаимодействие с базами данных.
Кроме того, книга дает дополнительные сведения о работе внутренних механизмов Go, знание которых позволит оптимизировать код на Go и использовать типы и структуры данных новыми и необычными способами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤2🌚1
python -m SimpleHTTPServer <port>
, только на Go.Развернуть статический файловый сервер на Go всегда было просто:
package main
import "net/http"
func main() {
port := ":8080"
handler := http.FileServer(http.Dir("."))
http.ListenAndServe(port, handler)
}
Но у Eli Bendersky есть другой способ. Стоит попробовать:
$
go run github.com/eliben/static-server@latest
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - eliben/static-server: A simple, zero-configuration HTTP server CLI for serving static files
A simple, zero-configuration HTTP server CLI for serving static files - eliben/static-server
👍19
Forwarded from Библиотека тестировщика | QA, тестирование, quality assurance, manual testing, autotesting, ручное тестирование, автотесты
🔝 Приоритизация задач по методу MoSCoW: как за 5 минут научиться грамотно расставлять приоритеты
Читать статью
#туториал
Читать статью
#туториал
👍3⚡1🔥1🤔1🥱1
📌Внутри следующие категории:
• Algorithms
• Data
• Drivers
• File systems
• Getting and/or Setting
• Implementation
• Membership
• Parsing
• Process control
• Protocols
• Reading and/or Writing
• Representation
• Subtypes
🔗 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
Gist
Categorizing Go Interfaces from the StdLib.md
Categorizing Go Interfaces from the StdLib.md. GitHub Gist: instantly share code, notes, and snippets.
🔥13👍5
Скорее всего, вы слышали о книге Teiva Harsanyi 100 Go Mistakes and How to Avoid Them. Возможно, вы не знаете, что в общем доступе есть сокращенная версия книги. В ней собраны все ошибки из книги.
🔗GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17
Битва за производительность: SparseMap vs GenerationsMap
Пока Искандер Шарипов занимался своими геймдев-задачами, натолкнулся на то, что get и set у sparse map из статьи Расса Кокса довольно медленные. Из-за чего преимущество быстрого reset иногда перекрывались.
То есть: что банальный слайс, что sparse map, давали +/- одинаковое время исполнения. В одном случае reset занимал больше времени, а в другом — время исполнения росло из-за более дорогих get+set.
А вот штука, описанная в статье, умеет и в мгновенный reset, и в более эффективные get+set.
🔗 Читать
Пока Искандер Шарипов занимался своими геймдев-задачами, натолкнулся на то, что get и set у sparse map из статьи Расса Кокса довольно медленные. Из-за чего преимущество быстрого reset иногда перекрывались.
То есть: что банальный слайс, что sparse map, давали +/- одинаковое время исполнения. В одном случае reset занимал больше времени, а в другом — время исполнения росло из-за более дорогих get+set.
А вот штука, описанная в статье, умеет и в мгновенный reset, и в более эффективные get+set.
🔗 Читать
Хабр
Битва за производительность: SparseMap vs GenerationsMap
Есть такая занимательная структура данных, описанная в статье Russ Cox — sparse map. Она используется, например, в недрах компилятора Go . А ещё в некоторых пакетах его стандартной библиотеки . У неё...
🔥12❤1
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
🦸⚡ 9 способов настройки градиента цели для поддержания мотивации
Разбираемся, как настроить себя идти до конца, преодолевая препятствия и лень.
Читать статью
#саморазвитие
Разбираемся, как настроить себя идти до конца, преодолевая препятствия и лень.
Читать статью
#саморазвитие
🔥1🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
🧰fx долгое время был полезным инструментом для просмотра JSON-файлов, но за дело взялся SRE из Google Антон Медведев.
👨🔧Антон переписал fx с нуля, добавив новый тематический вид TUI, поиск по регулярным выражениям, нечеткий поиск и поддержку «даже самых массивных JSON-файлов».
🤩Поистине крутой инструмент и отличный пример использования преимуществ Go.
🔗fx 30.0.0
👨🔧Антон переписал fx с нуля, добавив новый тематический вид TUI, поиск по регулярным выражениям, нечеткий поиск и поддержку «даже самых массивных JSON-файлов».
🤩Поистине крутой инструмент и отличный пример использования преимуществ Go.
🔗fx 30.0.0
👍21🔥8