Redis поддерживает два механизма сохранения данных:
Эти два метода
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
sync/atomic
Атомарная операция
Store
Load
той же переменной Инициализация
main()
, что Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн «Функциональные опции»
Этот подход идеален,
Пример
type Server struct {
host string
port int
protocol string
}
func NewServer(host string, port int) *Server {
return &Server{host: host, port: port, protocol: "http"}
}
Реализация функциональных опций
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)) // с портом 8080
Этот подход позволяет добавлять параметры
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🤔7👏1
Планировщик Go отвечает за
• G (goroutine)
• M (machine thread)
• P (processor)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🤔2
Дженерики в Go — это механизм, введенный в версии 1.18
Дженерики позволяют
• Уменьшение
• Повышенная
• Увеличение
До введения дженериков, разработчики использовали интерфейсы и преобразование типов для обеспечения гибкости.
func MinInts(arr []int) int { /*...*/ }
func MinFloats(arr []float64) float64 { /*...*/ }
Теперь с использованием дженериков можно создать
func Min[T comparable](arr []T) T { /*...*/ }
Здесь
T
— это comparable
указывает,Без дженериков:
type Queue struct {
data []interface{}
}
Использование
interface{}
требует С дженериками:
type Queue[T any] struct {
data []T
}
Здесь
T
может быть Внедрение дженериков в Go получило положительный отклик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
Разработку проекта поддержали 1600 айтишников, а суммарно на запуск было собрано 5 млн. руб. через краудфандинг.
«Всё в одном» для тех, кто ищет работу в IT:
В честь релиза первые 500 пользователей получат скидку 60% на годовой PRO-доступ
🔔 Подпишитесь на Telegram-канал проекта
https://t.me/+UYkjii31QQozZjgy Там появится анонс релиза раньше, чем где-либо ещё. Вы успеете попасть в число первых 500 и получить максимальную выгоду.
Реклама. ИП Кивайко Алексей Викторович, ИНН 532121460552. Erid 2VtzqvmGkoZ
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱1
Escape analysis — это техника
В Go
Компилятор
Если же переменная «выходит» — например,
func sum(a, b int) int {
result := a + b
return result
}
В данном случае переменная
result
func newInt() *int {
result := 42
return &result
}
Здесь переменная
result
выходит за пределы var globalVar *int
func setGlobalVar() {
x := 100
globalVar = &x
}
Переменная
x
Escape analysis помогает управлять
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9👏2🤔1
🔥 Вы ещё можете застать старый добрый Proglib — с вечным доступом к курсам.
С 1 августа всё меняется: навсегда — останутся только те, кто успел купить сейчас.
-40% на все курсы. Включая обновлённый Python (кроме курса по AI-агентам)
Это не просто распродажа. Это — последняя точка входа в Proglib Academy по старым правилам.
📚 Выбрать и забрать свой курс навсегда → https://clc.to/TBtqYA
С 1 августа всё меняется: навсегда — останутся только те, кто успел купить сейчас.
-40% на все курсы. Включая обновлённый Python (кроме курса по AI-агентам)
Это не просто распродажа. Это — последняя точка входа в Proglib Academy по старым правилам.
📚 Выбрать и забрать свой курс навсегда → https://clc.to/TBtqYA
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуется фидбек в комментах.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍2❤1
Паттерн Прототип позволяет
В Go этот паттерн может быть реализован через
Чтобы реализовать этот паттерн, мы будем использовать
1. display — для отображения информации о текущем элементе.
2. clone — для создания копии элемента.
Doc1
Doc1_copy
Рекурсивное клонирование — объект является директорией, клонирует не только саму директорию, но и все ее элементы, повторяя этот процесс для каждой вложенной директории и ее элементов.
Суффикс "_copy" — клон получает суффикс "_copy" в своем имени, что позволяет легко отличить оригинальный объект от его копии. (Doc1 → Doc1_copy)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🤩2
Inlining — это
func add(a, b int) int {
return a + b
}
func main() {
result := add(3, 4)
fmt.Println(result)
}
func main() {
result := 3 + 4
fmt.Println(result)
}
Основные моменты:
-gcflags="-m"
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Чтобы работать с
Передача
func modifyValue(x int) {
x = x * 2
}
func main() {
num := 10
modifyValue(num)
fmt.Println(num) // 10
}
В примере
num
Передача
Срезы и мапы передаются
func modifySlice(s []int) {
s[0] = 100
}
func main() {
numbers := []int{1, 2, 3}
modifySlice(numbers)
fmt.Println(numbers) // [100 2 3]
}
Передача
func modifyWithPointer(x *int) {
*x = *x * 2
}
func main() {
num := 10
modifyWithPointer(&num)
fmt.Println(num) // 20
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Это прямая реклама онлайн курсов по программированию.
Погоди-погоди! Не скипай. Я очень быстро постараюсь объяснить тебе разницу между “другими” и “нами”.
Мы гарантируем не только трудоустройство после курса по Go-разработке, но и минимальную зарплату. То есть ты не просто “устроишься и ладно”. Нам важно, чтобы ты получал как можно больше - мы с этого зарабатываем. Поэтому мы гарантируем тебе минимум 120.000 рублей с первого же месяца работы после курса.
Согласись, гарантия в 120.000 рублей, а не просто «трудоустройство», это совсем другой уровень ответственности. Ведь многие курсы считают свою задачу выполненной, даже если ты устроился за 40к - и как ты будешь возвращать вложения с такой зарплатой, их уже не волнует.
Это - наше основное отличие. Теперь коротко про сам курс: море практики, командные проекты, коллы с ментором - всё, как ты любишь.
Про язык: Go это относительно молодой, достаточно простой для изучения (всего 50 страниц документации), жутко востребованный в 2025 году (это только начало!) и эпически высокооплачиваемый. Так что 120к - это действительно минимальная зарплата при грамотном подходе.
Собственно, это всё. Будь зайкой, запишись на консультацию, там расскажем всё подробнее. Это бесплатно: https://kata.pw/vdbdzv
Реклама. ООО «КАТА АКАДЕМИЯ», ИНН 7802925162. Erid 2VtzqwwZSrL
Погоди-погоди! Не скипай. Я очень быстро постараюсь объяснить тебе разницу между “другими” и “нами”.
Мы гарантируем не только трудоустройство после курса по Go-разработке, но и минимальную зарплату. То есть ты не просто “устроишься и ладно”. Нам важно, чтобы ты получал как можно больше - мы с этого зарабатываем. Поэтому мы гарантируем тебе минимум 120.000 рублей с первого же месяца работы после курса.
Согласись, гарантия в 120.000 рублей, а не просто «трудоустройство», это совсем другой уровень ответственности. Ведь многие курсы считают свою задачу выполненной, даже если ты устроился за 40к - и как ты будешь возвращать вложения с такой зарплатой, их уже не волнует.
Это - наше основное отличие. Теперь коротко про сам курс: море практики, командные проекты, коллы с ментором - всё, как ты любишь.
Про язык: Go это относительно молодой, достаточно простой для изучения (всего 50 страниц документации), жутко востребованный в 2025 году (это только начало!) и эпически высокооплачиваемый. Так что 120к - это действительно минимальная зарплата при грамотном подходе.
Собственно, это всё. Будь зайкой, запишись на консультацию, там расскажем всё подробнее. Это бесплатно: https://kata.pw/vdbdzv
Реклама. ООО «КАТА АКАДЕМИЯ», ИНН 7802925162. Erid 2VtzqwwZSrL
👾2❤1🤔1
Оператор
select
в Go напоминает конструкцию switch
, но предназначен select
select
default
select
выберет один из них случайным образом.Пример
select
select {
case msg1 := <-ch1:
fmt.Println("Received", msg1)
case msg2 := <-ch2:
fmt.Println("Received", msg2)
case ch3 <- 3:
fmt.Println("Sent 3 to ch3")
default:
fmt.Println("No communication")
}
В этом примере
select
будет ch1
ch2
ch3
default
Please open Telegram to view this post
VIEW IN TELEGRAM
Тест для Golang-разработчиков, проверьте свои знания, готовы ли вы к обучению на курсе.
💻 Ответьте на 20 вопросов за 30 минут и проверьте, готовы ли вы к обучению на онлайн-курсе «Golang Developer. Professional» от OTUS. Сейчас Go становится все востребованнее, благодаря своей производительности, масштабируемости и экосистеме.
После 5 месяцев обучения вы сможете:
— Писать production-ready код, многопоточные и конкурентные программы.
— Понимать синтаксис и внутреннее устройство языка Go.
— Разворачивать микросервисы с помощью Docker.
— Проектировать и реализовывать микросервисную архитектуру на Go.
Также вас ждет прокачка навыков на реальных коммерческих кейсах и под руководством экспертов в этой области. Старт курса 30 июля, успейте на курс. Возможна рассрочка.
👉 ПРОЙТИ ТЕСТ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
💻 Ответьте на 20 вопросов за 30 минут и проверьте, готовы ли вы к обучению на онлайн-курсе «Golang Developer. Professional» от OTUS. Сейчас Go становится все востребованнее, благодаря своей производительности, масштабируемости и экосистеме.
После 5 месяцев обучения вы сможете:
— Писать production-ready код, многопоточные и конкурентные программы.
— Понимать синтаксис и внутреннее устройство языка Go.
— Разворачивать микросервисы с помощью Docker.
— Проектировать и реализовывать микросервисную архитектуру на Go.
Также вас ждет прокачка навыков на реальных коммерческих кейсах и под руководством экспертов в этой области. Старт курса 30 июля, успейте на курс. Возможна рассрочка.
👉 ПРОЙТИ ТЕСТ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Указатели — это
Определение и инициализация
Указатель
*
var x *int
int
.Для получения
&
. Например, &y
y
.*
x
y
*x
y
nil
nil
.
pointerToStruct.FieldName
nil
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1🥱1
GOMAXPROCS — это
Как работает
Значение по умолчанию
Изменение GOMAXPROCS
runtime.GOMAXPROCS()
Как это влияет на производительность
Инструмент от Uber — automaxprocs, который автоматически настраивает GOMAXPROCS в соответствии с квотой процессора в Linux-контейнерах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Передача указателей экономит память и улучшает производительность, избегая копирования больших объектов.
type LargeStruct struct {
Field1 [1000]int
Field2 [1000]int
}
func modify(s *LargeStruct) {
s.Field1[0] = 42
}
func main() {
ls := LargeStruct{}
modify(&ls) // Передаем указатель, избегая копирования
}
Для изменения значения переменной в функции и отражения этих изменений за пределами функции необходимо использовать указатель.
func increment(x *int) {
*x++
}
func main() {
num := 10
increment(&num) // Изменение переменной через указатель
fmt.Println(num) // 11
}
nil
Указатели позволяют работать с
nil
type User struct {
Name string
}
func createUser() *User {
return nil // Возвращаем nil, если пользователь не найден
}
func main() {
user := createUser()
if user == nil {
fmt.Println("User not found")
}
}
Указатели необходимы для работы с системными ресурсами или низкоуровневыми API, такими как через
cgo
/*
#include <stdlib.h>
void modify(int *x) {
*x = 42;
}
*/
import "C"
func main() {
var num int
C.modify((*C.int)(&num)) // Используем указатель для передачи в C-функцию
fmt.Println(num) // 42
}
Указатели удобны для совместного использования данных в горутинах, но требуют синхронизации для предотвращения гонок.
func incrementCounter(counter *int) {
*counter++
}
func main() {
counter := 0
go incrementCounter(&counter)
fmt.Println(counter) // Возможно увеличение
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
В стандартной библиотеке Go целый набор мощных инструментов, которые делают процесс разработки проще и удобнее. Эти инструменты помогают разработчикам работать с исходным кодом, проводить тестирование, управлять зависимостями и многое другое.
go fmt
— go get
— go test
— go build
— go run
— go doc
— go vet
— go mod
— Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
В Go сборщик мусора (GC) автоматически управляет памятью, но бывают ситуации, когда нужно вмешаться и настроить его работу под свои нужды.
Принудительный запуск GC
Хотя сборщик мусора обычно работает автоматически, мы можем вручную запустить его с помощью функции
runtime.GC()
Отключение и включение GC
Можно временно отключить сборщик мусора, установив
debug.SetGCPercent(-1)
debug.SetGCPercent(100)
GOGC = 100 (значение по умолчанию) означает, что сборка мусора произойдет, когда объем выделенной памяти увеличится на 100% по сравнению с предыдущей сборкой.
GOGC = 50 ускоряет сборку мусора, позволяя ей запускаться чаще — после 50% увеличения памяти.
GOGC = -1 отключает сборщик мусора.
GOGC = 50 ./your-program
Или изменить его внутри программы с помощью
debug.SetGCPercent()
❕Важно помнить
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4