arr1 := [5]int{}
arr2 := [...]int{1, 2, 3}
arr3 := [...]int{}
arr1 := [5]int{}
— 0
int
это значение arr2 := [...]int{1, 2, 3}
— А вот
arr3 := [...]int{}
arr3 := [0]int{}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3❤1⚡1
🔥 Последняя неделя перед стартом курса по AI-агентам
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
• Избегание дублирования состояния в памяти
• Работа в многопоточной среде и потокобезопасный доступ к общей структуре
• Затрудняет тестирование (невозможно подменить зависимости)
• Провоцирует на глобальные сингл-точки сбоя (если объект упал — всё развалилось)
• Препятствует масштабируемости при переходе к микросервисной архитектуре
private
sync
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🌚2👏1
context.Background()
или context.TODO()
Когда вы работаете с Go-контекстами, легко запутаться: оба выглядят одинаково, оба ничего не делают — но используются по-разному.
context.Background()
main()
context.TODO()
Такой контекст часто используется в
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3❤2
sync.Mutex
Рабочий
package main
import (
"fmt"
"sync"
)
type singleton struct {
data string
}
var (
instance *singleton
mu sync.Mutex
)
func GetInstance() *singleton {
if instance == nil {
mu.Lock()
defer mu.Unlock()
if instance == nil {
instance = &singleton{data: "initialized"}
}
}
return instance
}
func main() {
s := GetInstance()
fmt.Println("Singleton data:", s.data)
}
if instance == nil
mu.Lock()
sync.Once
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👏1
context
в Go вы знаетеctx := context.Background()
ctx, cancel := context.WithTimeout(ctx, 3*time.Second)
defer cancel()
• WithCancel
• WithTimeout
• WithDeadline
• WithValue
Каждая из этих функций создаёт дочерний контекст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🥱1
sync.Once
, если уже есть мьютексыЕсли вы хотите
sync.Once
package main
import (
"fmt"
"sync"
)
type singleton struct {
config string
}
var (
once sync.Once
instance *singleton
)
func GetInstance() *singleton {
once.Do(func() {
instance = &singleton{config: "default"}
})
return instance
}
func main() {
s := GetInstance()
fmt.Println("Singleton config:", s.config)
}
sync.Once
GetInstance
вызывается из Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2
ctx.Done()
внутри горутин и что произойдёт, если этого не делатьКонтекст используется
ctx.Done()
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("goroutine stopped:", ctx.Err())
return
case <-time.After(1 * time.Second):
fmt.Println("working...")
}
}
}(ctx)
Если не слушать
ctx.Done()
, вы получите:• Зависание приложения
• Недетерминированное поведение при отмене
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуется фидбек в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥13❤7🥱1
init()
не считается ленивойinit()
.init()
package main
import (
"fmt"
)
type singleton struct {
config string
}
var instance *singleton
func init() {
instance = &singleton{config: "preloaded"}
}
func GetInstance() *singleton {
return instance
}
func main() {
s := GetInstance()
fmt.Println("Singleton config:", s.config)
}
• Инициализация происходит
main()
• Синхронизация не требуется
init()
• Порядок инициализации между пакетами
•
•
•
• Нарушает
• Затрудняет
• Может
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4❤2👍1
context
в юнит-тестахcontext
— мощный инструмент,Чтобы избежать зависаний и утечек в юнит-тестах, всегда создавайте
context
ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
defer cancel()
• Это гарантирует:
Ресурсы будут высвобождены
Горутины получат сигнал на завершение
Если ваш тест зависает
ctx.Done()
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
sync.Mutex
, sync.Once
или init()
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3
select
, если можно просто читать из каналаВ Go оператор
select
switch
С его помощью можно:
• Управлять конкурентными потоками без блокировок
• Не блокироваться, если добавить
default
select {
case msg := <-ch1:
fmt.Println("Received from ch1:", msg)
case ch2 <- 42:
fmt.Println("Sent 42 to ch2")
default:
fmt.Println("Nothing ready")
}
Если
ch1
или ch2
готовы Если ни один канал не активен
default
select
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Singleton может мешать тестированию
type Storage interface {
Get(key string) string
}
func ProcessData(s Storage) { ... }
// В тестовых сборках
func resetSingleton() {
instance = nil
once = sync.Once{}
}
❕Warning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔1
select
выбирает случайноОдно из важных свойств
select
в Go select {
case msg := <-ch1:
fmt.Println("ch1:", msg)
case msg := <-ch2:
fmt.Println("ch2:", msg)
}
Если и
ch1
, и ch2
доступны Это исключает жёсткий приоритет каналов
Это нужно для предотвращения "голодания"
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍3🌚2
Отношение happens-before гарантирует
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2🎉1
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуется фидбек в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥9😢7❤3👾1
Redis поддерживает два механизма сохранения данных:
Эти два метода
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2