iota
и зачем он нужен при объявлении константiota
iota
const
const
iota
iota
Please open Telegram to view this post
VIEW IN TELEGRAM
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуются комментарии под постом.
Please open Telegram to view this post
VIEW IN TELEGRAM
bytes.FieldsFunc
Пример кода:
package main
import (
"bytes"
"fmt"
)
func main() {
input := []byte("apple,,orange,,banana")
result := bytes.FieldsFunc(input, func(c rune) bool {
return c == ',' // Разделяем по запятым
})
fmt.Println(result) // [[97 112 112 108 101] [111 114 97 110 103 101] [98 97 110 97]]
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Гонки данных в Go возникают,
Please open Telegram to view this post
VIEW IN TELEGRAM
ООП
В Go нет классов, но есть структуры (struct), которые выполняют роль классов, и методы, привязанные к этим структурам.
Это позволяет поддерживать принципы инкапсуляции и абстракции, но без классической иерархии наследования.
Please open Telegram to view this post
VIEW IN TELEGRAM
int, float64
0
false
""
nil
Please open Telegram to view this post
VIEW IN TELEGRAM
Массив — это структура данных
Как его создать:
[capacity]data_type{element_values}
Срез — это
Как его создать:
s := []data_type{element1, element2, ...}
Особенности срезов:
• Для
len()
, для cap()
.• Для добавления
append()
.•
[first_index:second_index]
или s[:]
.• Удаление элементов
append(s[:i], s[i+1:]...)
.•
•
copy()
.Please open Telegram to view this post
VIEW IN TELEGRAM
package
Пакеты позволяют структурировать программу, разделяя её на логические компоненты.
Особенности в пакетах:
package <имя>
import
для доступаПример:
var Pi = 3.14 // экспортируемая
var radius = 5 // неэкспортируемая
• Программы должны
main
main()
fmt
и math/rand
go get
go.mod
_test.go
Please open Telegram to view this post
VIEW IN TELEGRAM
map
в Go• Создание map
make
m := make(map[string]int)
m["a"] = 1
m["b"] = 2
m := map[string]int{
"a": 1,
"b": 2,
}
• Работа с элементами карты
m["c"] = 3
Получение значения:
value := m["a"]
Проверка наличия ключа:
value, exists := m["b"]
Удаление элемента:
delete(m, "a")
Карты в Go не потокобезопасны.
(sync.Mutex)
sync.Map
var mu sync.Mutex
mu.Lock()
m["a"] = 1
mu.Unlock()
Please open Telegram to view this post
VIEW IN TELEGRAM
Если попытаться
Когда
panic: interface conversion: <interface type> is <actual type>, not <expected type>
Программа
ok
, чтобы обработатьPlease open Telegram to view this post
VIEW IN TELEGRAM
Однако важно быть внимательным
Основные моменты:
• Сборщик мусора:
• Указатели:
• Циклические ссылки:
Хотя управление памятью автоматическое
• Срезы:
Это динамические массивы
• Стек и куча:
Память делится на стек
• Escape analysis:
Этот механизм анализирует
Please open Telegram to view this post
VIEW IN TELEGRAM
Интерфейс в Go — это набор методов
type Writer interface {
Write([]byte) (int, error)
}
Тип
Интерфейс без методов называется пустым (
interface{}
Можно комбинировать интерфейсы, например:
type ReadWriter interface {
Reader
Writer
}
Если метод имеет указатель в качестве получателя, он может быть частью интерфейса
Интерфейсы задают требования к поведению типов, что позволяет функциям
Для приведения типов и проверки типа значения интерфейса используют операции
type
assertion
и type switch
.Интерфейс состоит из двух частей: указателя на значение и указателя на таблицу методов этого значения.
Интерфейс может содержать значение
nil
Please open Telegram to view this post
VIEW IN TELEGRAM
🏎 Вы уже сталкивались с «глухими» зависаниями и гонками данных в Go? Настало время взять каналы под контроль!
💻 На открытом уроке «Подводные камни каналов в Go — и как их обходить» 1 июля в 20:00 МСК мы не просто обсудим, что такое каналы:
— покажем реальные кейсы;
— узнаем, где без них не обойтись;
— разберём частые ошибки, которые тормозят ваши сервисы.
🚀 Представьте: ваш сервис обрабатывает запросы параллельно, без блокировок и утечек. Вы глубоко понимаете, как каналы помогают строить конкурентный код и уверенно внедряете это на любом проекте.
👉 Регистрируйтесь сейчас и получите персональную скидку на курс «Golang Developer. Professional»: https://clc.to/0fYV1g
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
💻 На открытом уроке «Подводные камни каналов в Go — и как их обходить» 1 июля в 20:00 МСК мы не просто обсудим, что такое каналы:
— покажем реальные кейсы;
— узнаем, где без них не обойтись;
— разберём частые ошибки, которые тормозят ваши сервисы.
🚀 Представьте: ваш сервис обрабатывает запросы параллельно, без блокировок и утечек. Вы глубоко понимаете, как каналы помогают строить конкурентный код и уверенно внедряете это на любом проекте.
👉 Регистрируйтесь сейчас и получите персональную скидку на курс «Golang Developer. Professional»: https://clc.to/0fYV1g
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
defer
Когда встречается
defer
Применения defer:
defer
file, err := os.Open("file.txt")
if err != nil {
// обработка ошибки
}
defer file.Close()
defer
func example() {
defer fmt.Println("1")
defer fmt.Println("2")
fmt.Println("Function body")
}
defer
defer
func example(a int) {
defer fmt.Println(a)
a *= 2
return
}
example(5) // Выведет: 5
defer
recover()
func mightPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}()
// код, который может вызвать панику
}
defer
defer
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯 Мы больше года строим мультиагентные системы
Грабли, находки, паттерны, эксперименты — всё это накопилось и в какой-то момент стало жалко держать только у себя.
Никита — рассказывает (и показывает) базу: токенизация, LLM, SFT, PEFT, локальный инференс + RAG и как оценивать его качество.
Диана — как строят мультиагентные системы, какие есть паттерны проектирования и библиотеки.
Макс — про инференс в проде + разберет CoPilot, соберет с вами из кусочков свой копайлот, а затем его сломает через prompt injection. // Макс фанат autogen (а если нет — он вас разубедит в своем классном канале)
Финальным аккордом Дима углубится в MCP и соберет несколько кейсов повзрослее.
Курс тут: https://clc.to/47pgYA
Промокод:datarascals действует до 23:59 29 июня
Грабли, находки, паттерны, эксперименты — всё это накопилось и в какой-то момент стало жалко держать только у себя.
Никита — рассказывает (и показывает) базу: токенизация, LLM, SFT, PEFT, локальный инференс + RAG и как оценивать его качество.
Диана — как строят мультиагентные системы, какие есть паттерны проектирования и библиотеки.
Макс — про инференс в проде + разберет CoPilot, соберет с вами из кусочков свой копайлот, а затем его сломает через prompt injection. // Макс фанат autogen (а если нет — он вас разубедит в своем классном канале)
Финальным аккордом Дима углубится в MCP и соберет несколько кейсов повзрослее.
Курс тут: https://clc.to/47pgYA
Промокод:
new
make
new
p := new(int)
p
int
make
• Срезы: при создании среза с помощью
make
s := make([]int, 5, 10)
make
m := make(map[string]int)
• Каналы:
make
ch := make(chan int)
Основные различия между
make
new
new
make
make
. new
Please open Telegram to view this post
VIEW IN TELEGRAM