new([]int) и можно ли с этим работатьВернётся указатель на nil слайс. Записать по индексу нельзя, будет паника, потому что под массив память ещё не выделена.
А вот
append сработает, так как он сам создаёт массив при необходимости. Но на практике так почти никто не пишет, для слайсов берут make или литерал.Please open Telegram to view this post
VIEW IN TELEGRAM
🎬 Где ломаются архитектуры ИИ-агентов и как этого избежать: запись урока от Proglib.Academy и cloud․ru
Proglib.аcademy вместе с cloud․ru провели вебинар, где разобрали реальные боли проектирования автономных систем. Вы просили запись встречи — она уже в открытом доступе!
Что внутри:
— критерии выбора между одним агентом и мультиагентной системой;
— разбор популярных архитектурных ошибок;
— реальные ограничения современных ИИ-агентов;
— практические рекомендации по проектированию агентных систем.
👉 Посмотреть запись можно тут:
● VK
● YouTube
Proglib.аcademy вместе с cloud․ru провели вебинар, где разобрали реальные боли проектирования автономных систем. Вы просили запись встречи — она уже в открытом доступе!
Что внутри:
— критерии выбора между одним агентом и мультиагентной системой;
— разбор популярных архитектурных ошибок;
— реальные ограничения современных ИИ-агентов;
— практические рекомендации по проектированию агентных систем.
👉 Посмотреть запись можно тут:
● VK
● YouTube
make([]int, 10, 15)Первое число это длина, второе ёмкость. Здесь создаётся слайс из десяти элементов, обнулённых, с запасом памяти под пятнадцать. Ёмкость можно не указывать, тогда она равна длине.
s := make([]int, 10, 15)
fmt.Println(len(s), cap(s)) // 10 15
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱10❤1
⭐️ Dream Team 5-го потока: научитесь строить ИИ-агентов у практиков из BigTech
14 июля стартует новый поток курса по разработке ИИ-агентов, и в этот раз мы собрали по-настоящему звездный состав менторов. Это эксперты, которые прямо сейчас определяют развитие AI в России: Yandex Cloud, Avito AI Lab, cloud․ru и НИУ ВШЭ.
Чтобы ваш вход в ИИ-инженерию был максимально мощным, мы подготовили специальное предложение: до 30 июня при покупке курса по ИИ-агентам вы получаете еще 2 любых курса Академии в подарок! 🔥
Как это работает: вы оставляете заявку на курс по разработке ИИ-агентов и указываете менеджеру ещё два курса, которые хотите забрать бесплатно.
👉Заберите 3 курса по цене 1 на звездном потоке по ИИ-агентам
14 июля стартует новый поток курса по разработке ИИ-агентов, и в этот раз мы собрали по-настоящему звездный состав менторов. Это эксперты, которые прямо сейчас определяют развитие AI в России: Yandex Cloud, Avito AI Lab, cloud․ru и НИУ ВШЭ.
Чтобы ваш вход в ИИ-инженерию был максимально мощным, мы подготовили специальное предложение: до 30 июня при покупке курса по ИИ-агентам вы получаете еще 2 любых курса Академии в подарок! 🔥
Как это работает: вы оставляете заявку на курс по разработке ИИ-агентов и указываете менеджеру ещё два курса, которые хотите забрать бесплатно.
👉Заберите 3 курса по цене 1 на звездном потоке по ИИ-агентам
Типы возвращаемых значений перечисляются в круглых скобках после списка аргументов, а в
return передаются сами значения через запятую:func calculateStats(numbers []int) (int, int, float64) {
sum, max := 0, numbers[0]
for _, n := range numbers {
sum += n
if n > max {
max = n
}
}
avg := float64(sum) / float64(len(numbers))
return sum, max, avg
}Please open Telegram to view this post
VIEW IN TELEGRAM
🥱6
🚀 Не уверены, стоит ли переходить на зрелую ИИ-инженерию? Начните с демо-урока!
Вот-вот стартует наш курс AgentOps. Если вы сомневаетесь в формате, просто оставьте заявку и получите бесплатный демо-урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».
Для тех, кто готов мощно прокачать портфолио, прямо сейчас действует предложение «3 любых курса по цене 1»:
👉 Получить демо-урок и зафиксировать спецпредложение 3 в 1
Вот-вот стартует наш курс AgentOps. Если вы сомневаетесь в формате, просто оставьте заявку и получите бесплатный демо-урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».
Для тех, кто готов мощно прокачать портфолио, прямо сейчас действует предложение «3 любых курса по цене 1»:
— При покупке VIP-тарифа (осталось 4 места) нового потока «ИИ-агенты» вы получаете в подарок доступ к курсу «AgentOps» + ещё один любой курс Академии на выбор
— В деньгах это два топовых курса по автоматизации и контролю ИИ всего за 134.000 ₽ вместо 263.000 ₽ 🔥 А за счет третьего курса (например, можно выбрать «Математику») вы соберете мощный стек и освоите целое востребованное направление.
— Платеж можно разбить на несколько частей с помощью беспроцентной рассрочки.
👉 Получить демо-урок и зафиксировать спецпредложение 3 в 1
😁2
Пара значение и ошибка. Функция возвращает результат и
error, который вызывающий код обязан проверить. Это основа идиоматичной обработки ошибок в Go.func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("деление на ноль")
}
return a / b, nil
}Please open Telegram to view this post
VIEW IN TELEGRAM
😁3🥱2
⚠️ Уже завтра стартует курс AgentOps!
Мы собрали на потоке сборную из мастеров IT-рынка. Практики из BigTech научат вас контролировать и отлаживать ИИ-агентов, чтобы они работали предсказуемо и не сливали бюджет на API.
🔥 Заберите 3 курса по цене 1:
Хотите прокачать свое портфолио продакшн-кейсом, но пока сомневаетесь? Пройдите наш бесплатный демо-урок, чтобы протестировать формат перед покупкой.
👉 Забрать 3 курса по цене 1 и получить демо-урок
Мы собрали на потоке сборную из мастеров IT-рынка. Практики из BigTech научат вас контролировать и отлаживать ИИ-агентов, чтобы они работали предсказуемо и не сливали бюджет на API.
🔥 Заберите 3 курса по цене 1:
● При покупке VIP-тарифа (осталось 4 места) нового потока «Разработка ИИ-агентов» получаете в подарок курс «AgentOps» + ещё один любой курс Академии (например, «Математика для разработки AI», чтобы глубже освоить направление).
● Три курса обойдутся вам всего в 134.000 ₽ вместо 263.000 ₽.
● Доступна удобная беспроцентная рассрочка, платеж можно разбить на несколько комфортных частей.
Хотите прокачать свое портфолио продакшн-кейсом, но пока сомневаетесь? Пройдите наш бесплатный демо-урок, чтобы протестировать формат перед покупкой.
👉 Забрать 3 курса по цене 1 и получить демо-урок
return и когда он опасенЭто
return без перечисления значений при именованных возвратах. В коротких функциях он читается нормально, но в длинных мешает понять, что именно вернётся, потому что значения задаются где то выше по телу. Поэтому голый возврат держат для небольших функций.Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
ОПРОС: Ответьте на пару вопросов и получите промокод на все наши курсы! 🎁
Команда Prоglib.аcаdemy готовит к запуску новые продукты, и нам нужна ваша помощь. Мы хотим создавать обучение, которое будет решать ваши реальные карьерные задачи и бить точно в цель.
Поделитесь своим опытом и ожиданиями, чтобы мы сделали наши курсы еще полезнее именно для вас! Заполнение анкеты займет буквально 2–3 минуты, а с нас — скидка на любой наш курс!
👉 Пройти опрос в Яндекс Формах и забрать промокод
Команда Prоglib.аcаdemy готовит к запуску новые продукты, и нам нужна ваша помощь. Мы хотим создавать обучение, которое будет решать ваши реальные карьерные задачи и бить точно в цель.
Поделитесь своим опытом и ожиданиями, чтобы мы сделали наши курсы еще полезнее именно для вас! Заполнение анкеты займет буквально 2–3 минуты, а с нас — скидка на любой наш курс!
👉 Пройти опрос в Яндекс Формах и забрать промокод
Handler отличается от HandlerFuncHandler это интерфейс с одним методом ServeHTTP(ResponseWriter, *Request). HandlerFunc это тип функции, у которого метод ServeHTTP уже реализован и просто вызывает саму функцию. Он нужен как адаптер, чтобы обычную функцию можно было отдать туда, где ждут интерфейс.mux.Handle("/ping", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("pong"))
}))Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
🎮 Планы на выходные: соберите ИИ-агента в нашей новой игре!
Запустили интерактивную аркаду, где вы на практике поймете, как устроены агентные системы.
Какие навыки проверите:
- Архитектура: сборка графов на LangGraph;
- Компоненты: интеграция LLM, RAG и памяти;
- Безопасность: настройка Guardrails и отладка ошибок;
- Стейт: логика на сложных развилках.
Бонус: Больше баллов — выше скидка на обучение!
Наш новый поток стартует 14 июля. При покупке курса вы забираете еще 2 любых курса Академии в подарок!
Протестируйте свою инженерную логику и заберите максимальную скидку на обучение.
👉 Сыграть в аркаду и выбить скидку
Запустили интерактивную аркаду, где вы на практике поймете, как устроены агентные системы.
Юзеры бомбят в чате, тикеты горят, вам нужно спасать прод 🤓. Выстраивайте граф агента, подключайте узлы (RAG, CRM, Guardrails) и принимайте решения на развилках, чтобы бот не сливал данные.
Какие навыки проверите:
- Архитектура: сборка графов на LangGraph;
- Компоненты: интеграция LLM, RAG и памяти;
- Безопасность: настройка Guardrails и отладка ошибок;
- Стейт: логика на сложных развилках.
Бонус: Больше баллов — выше скидка на обучение!
Наш новый поток стартует 14 июля. При покупке курса вы забираете еще 2 любых курса Академии в подарок!
Протестируйте свою инженерную логику и заберите максимальную скидку на обучение.
👉 Сыграть в аркаду и выбить скидку
iota начинает с нуля в начале блока const и увеличивается на единицу для каждой новой строки. После присвоения значения переменной, можно не указывать iota снова для следующих переменных, и Go самостоятельно применит инкремент.const (
A = iota
B
C
D
)
// A = 0, B = 1, C = 2, D = 3
Важно помнить, что
iota применяется только внутри блока const. Если создать второй блок const, то счетчик снова начинает с нуля. Каждый блок независим.Please open Telegram to view this post
VIEW IN TELEGRAM
🎬 Как ИИ ускоряет разработку и где ломаются архитектуры
Мы провели открытый вебинар, где разобрали реальные боли проектирования автономных систем. Ольга Лукьянова на практическом кейсе показала, как использовать ИИ-ассистентов для реальных задач. Вы просили запись встречи — она уже в открытом доступе!
Что внутри:
— Как с помощью ИИ быстрее разбираться в незнакомом коде и готовить пулл-реквесты;
— Критерии выбора между одним агентом и мультиагентной системой;
— Разбор популярных архитектурных ошибок и ограничений современных ИИ;
— Практические рекомендации по проектированию и внедрению облачных агентов.
👉 Посмотреть полную запись можно тут:
● VK
● YouTube
🚀 Хотите пойти дальше открытого вебинара? Если вы готовы перейти от простых промптов к проектированию надежных, отказоустойчивых ИИ-систем, которые не сливают бюджет компании на API, приходите на курс AgentOps. Поток уже стартовал, но двери еще приоткрыты!
👉 Успеть на курс AgentOps
Мы провели открытый вебинар, где разобрали реальные боли проектирования автономных систем. Ольга Лукьянова на практическом кейсе показала, как использовать ИИ-ассистентов для реальных задач. Вы просили запись встречи — она уже в открытом доступе!
Что внутри:
— Как с помощью ИИ быстрее разбираться в незнакомом коде и готовить пулл-реквесты;
— Критерии выбора между одним агентом и мультиагентной системой;
— Разбор популярных архитектурных ошибок и ограничений современных ИИ;
— Практические рекомендации по проектированию и внедрению облачных агентов.
👉 Посмотреть полную запись можно тут:
● VK
● YouTube
🚀 Хотите пойти дальше открытого вебинара? Если вы готовы перейти от простых промптов к проектированию надежных, отказоустойчивых ИИ-систем, которые не сливают бюджет компании на API, приходите на курс AgentOps. Поток уже стартовал, но двери еще приоткрыты!
👉 Успеть на курс AgentOps
❤2
http.ListenAndServe(":8080", nil) считается плохой практикойnil означает DefaultServeMux, глобальный роутер. В него может зарегистрировать хендлер любой импортированный пакет, например net/http/pprof делает это в init. Так наружу случайно утекают отладочные ручки. У такого сервера нет тайм аутов. Правильнее создать свой
Server и свой ServeMux.Правильный вариант:
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadHeaderTimeout: 5 * time.Second,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
log.Fatal(srv.ListenAndServe())Please open Telegram to view this post
VIEW IN TELEGRAM
Это про автоматические исправления кода — фиксеры (например,
go fix, gofmt, suggested fixes из go vet / analysis-фреймворка, или --fix в линтерах вроде golangci-lint). Гарантия говорит, что такой фикс меняет только форму кода, но не его поведение во время выполнения.Под поведением тут понимается наблюдаемая семантика: что программа возвращает, какие у неё сайд-эффекты — запись в файл, вызовы по сети, вывод, — как идёт control flow, какие ошибки и паники она порождает. То есть на тех же входных данных до и после фикса программа должна давать тот же результат и те же эффекты. Трансформация behavior-preserving, семантически нейтральная.
Пример: фиксер может переписать устаревший API на новый, переставить импорты через
goimports, отформатировать код — но не должен, скажем, изменить условие в if так, что поменяется ветвление.И тут ключевой момент — формулировка «should not», а не «will not». Это заявленное свойство по дизайну, а не строгая гарантия на все случаи. В Go, где есть интерфейсы, рефлексия, горутины и гонки, всегда найдётся пограничный кейс, где формально эквивалентная замена всё же меняет смысл. Поэтому на практике фиксы обычно делят на safe и unsafe: safe можно катить массово, unsafe применяют осознанно.
Please open Telegram to view this post
VIEW IN TELEGRAM
http.Client на каждый запросНет.
Client и его Transport безопасны для конкурентного использования и держат пул TCP соединений. Новый клиент на каждый запрос убивает keep alive, каждый вызов будет заново устанавливать соединение вместе с TLS рукопожатием. Правильно создать один клиент на приложение и задать ему тайм аут, потому что у
http.DefaultClient его нет.Please open Telegram to view this post
VIEW IN TELEGRAM
💰 Почему одним Data Scientist платят больше, чем другим?
Дело не только в знании Python и ML-библиотек. Во многих компаниях уровень специалиста оценивают по математической подготовке: теории вероятностей, статистике, линейной алгебре и математическому анализу.
Именно эти знания помогают понимать модели, решать более сложные задачи и претендовать на позиции с более высокой оплатой.
На курсе «Математика для Data Science» вы изучите разделы, которые используются в работе Data Scientist и ML Engineer.
Что вас ждёт:
🔹 40+ видеолекций и 150+ практических заданий на Python
🔹 Проверка домашних работ и обратная связь от преподавателей
🔹 Подготовка к техническим собеседованиям
🔹 Программа от преподавателей ВМК МГУ, НИУ ВШЭ и экспертов индустрии
👉 Записаться на бесплатный демо-урок
Дело не только в знании Python и ML-библиотек. Во многих компаниях уровень специалиста оценивают по математической подготовке: теории вероятностей, статистике, линейной алгебре и математическому анализу.
Именно эти знания помогают понимать модели, решать более сложные задачи и претендовать на позиции с более высокой оплатой.
На курсе «Математика для Data Science» вы изучите разделы, которые используются в работе Data Scientist и ML Engineer.
Что вас ждёт:
🔹 40+ видеолекций и 150+ практических заданий на Python
🔹 Проверка домашних работ и обратная связь от преподавателей
🔹 Подготовка к техническим собеседованиям
🔹 Программа от преподавателей ВМК МГУ, НИУ ВШЭ и экспертов индустрии
👉 Записаться на бесплатный демо-урок
bigSlice = bigSlice[:5]Нет, не обязательно. Операция
[:5] создаёт новый слайс-заголовок с длиной 5, но он по-прежнему указывает на тот же самый underlying array. Пока хотя бы один слайс ссылается на этот массив, сборщик мусора не может его освободить. То есть даже если нам нужны первые 5 байт, за спиной может «висеть» все 10 MB:Дело в том, что срез — это лишь тройка из указателя на массив, длины и ёмкости. Урезание длины меняет только заголовок и никак не влияет на память под ним. Capacity нового слайса по-прежнему указывает на конец исходного массива, поэтому GC считает его достижимым.
Чтобы отдать большой массив сборщику, нужные данные копируют в новый, компактный слайс, а ссылку на исходный обнуляют:
smallCopy := make([]byte, len(smallSlice))
copy(smallCopy, smallSlice)
bigSlice = nil
Тот же эффект короче — через
append в nil-слайс, который выделит свежий массив под реальный объём данных:smallCopy := append([]byte(nil), smallSlice...)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Media is too big
VIEW IN TELEGRAM
📹 Из чего на самом деле состоит ИИ-агент?
Прикрепили для вас свежую вырезку из вебинара. Внутри, что прячется под капотом агентных систем: от LLM-ядра до вызова внешних инструментов. Обсуждаем, какими бывают агенты (спойлер: далеко не только автономными) и когда какой подход использовать.
Готовы перейти от видео к практике и собрать свой первый продакшн-кейс?
Прямо сейчас у нас действует акция «3 курса по цене 1»:
Сомневаетесь, подойдет ли вам формат? Оставьте заявку и пройдите бесплатный демо-урок, чтобы протестировать платформу перед покупкой.
👉 Пройти демо-урок и забрать 3 курса по цене 1
Прикрепили для вас свежую вырезку из вебинара. Внутри, что прячется под капотом агентных систем: от LLM-ядра до вызова внешних инструментов. Обсуждаем, какими бывают агенты (спойлер: далеко не только автономными) и когда какой подход использовать.
Готовы перейти от видео к практике и собрать свой первый продакшн-кейс?
Прямо сейчас у нас действует акция «3 курса по цене 1»:
🔹 При покупке VIP-тарифа нового потока «Разработка ИИ-агентов» вы получаете в подарок хардкорный курс «AgentOps» + ещё один любой курс Академии на ваш выбор!
🔹 Ваша чистая экономия — 129 000 ₽! Два топовых курса по созданию и контролю агентов обойдутся вам всего в 134 000 ₽ вместо 263 000 ₽. Плюс третий курс бонусом (например, «Математика для AI»).
Сомневаетесь, подойдет ли вам формат? Оставьте заявку и пройдите бесплатный демо-урок, чтобы протестировать платформу перед покупкой.
👉 Пройти демо-урок и забрать 3 курса по цене 1
Через второй возвращаемый параметр при обращении к мапе — так называемый comma-ok. Обычное чтение
v := m[key] всегда вернёт значение: если ключа нет, это будет нулевое значение типа (0 для чисел, "" для строк, nil для указателей). А значит, по одному только
v нельзя понять, лежал ли там реальный ноль или ключа просто не было:m := map[string]int{"a": 0}
v := m["a"] // 0 — но ключ есть
v = m["b"] // 0 — а ключа нетФорма с двумя переменными решает это: второе значение — булев флаг, который равен
true, только если ключ действительно присутствует в мапе. Именно на него и нужно смотреть, а не на само значение:v, ok := m["a"]
if ok {
// ключ есть, v — реальное значение (даже если это 0)
}
_, ok = m["b"] // ok == false, ключа нет
Отсюда типичный идиоматичный паттерн — проверка и использование в одном
if:if v, ok := m[key]; ok {
// работаем с v
}Please open Telegram to view this post
VIEW IN TELEGRAM
❤1