Примитивы синхронизации — инструменты (в основном из пакета
sync
), которые обеспечивают •
sync.Mutex
— базовый механизм •
sync.RWMutex
— вариант Одновременно могут
Запись возможна
•
sync.WaitGroup
— позволяет •
sync.Once
— гарантирует •
sync.Cond
— условная переменная, при помощи которой Go предлагает два подхода к синхронизации — через
sync
и через Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🚀 Главная ошибка новичка в ML — строить звездолёт вместо велосипеда
Многие сразу хотят свою Midjourney, но в итоге получают только выгорание.
Успех начинается с «велосипеда»: научитесь предсказывать цены или классифицировать отзывы. Освойте базу, а уже потом стройте «звездолёты».
Наш курс «ML для старта в Data Science» — это и есть тот самый правильный старт от простого к сложному.
👉 Начните правильно
Берёте курс «ML для старта» до конца недели — Python в подарок.
❗А 21 августа пройдет бесплатный вебинар с Марией Жаровой: узнаете, какие проекты качают скилл, а какие качают ваши нервы.
А какой самый сложный проект вы брались делать в самом начале? 🫢
Многие сразу хотят свою Midjourney, но в итоге получают только выгорание.
Успех начинается с «велосипеда»: научитесь предсказывать цены или классифицировать отзывы. Освойте базу, а уже потом стройте «звездолёты».
Наш курс «ML для старта в Data Science» — это и есть тот самый правильный старт от простого к сложному.
👉 Начните правильно
Берёте курс «ML для старта» до конца недели — Python в подарок.
❗А 21 августа пройдет бесплатный вебинар с Марией Жаровой: узнаете, какие проекты качают скилл, а какие качают ваши нервы.
А какой самый сложный проект вы брались делать в самом начале? 🫢
❤1
Пример
func main() {
c := make(chan bool)
m := make(map[string]string)
go func() {
m["1"] = "a" // Первый конфликтный доступ
c <- true
}()
m["2"] = "b" // Второй конфликтный доступ
<-c
for k, v := range m {
fmt.Println(k, v)
}
}
-race
$ go test -race mypkg
$ go run -race mysrc.go
$ go build -race mycmd
$ go install -race mypkg
GORACE
позволяет $ GORACE="log_path=/tmp/race/report Strip_path_prefix=/my/go/sources/" go test -race
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Пустой идентификатор
_
в Go используется как value, _ := someFunction()
range
: при переборе for k, _ := range myMap {
fmt.Println(k)
}
for _, v := range mySlice {
fmt.Println(v)
}
import _ "image/png"
_, y := getCoordinates()
result, _ := strconv.Atoi("123")
person := struct {
Name string
_ int
}{"Alice", 30}
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
• Анонимные функции в Go
• В Go есть возможность доступа к
Пример с функцией
incrementer
, которая создает i
:func incrementer() func() int {
i := 0
return func() int {
i++
return i
}
}
При вызове
incrementer
i
, и incrementer
i
.func main() {
increment := incrementer()
fmt.Println(increment()) // 1
fmt.Println(increment()) // 2
fmt.Println(increment()) // 3
newIncrement := incrementer()
fmt.Println(newIncrement()) // 1
}
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Оператор
switch
в Go позволяет проверять тип switch
включает хотя быcase
, который работает default
, который выполняется, Пример, который проверяет,
i
типом int
или string
:func do(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("Double %v is %v\n", v, v*2)
case string:
fmt.Printf("%q is %v bytes long\n", v, len(v))
default:
fmt.Printf("I don't know type %T!\n", v)
}
}
func main() {
do(21)
do("hello")
do(true)
}
Результат:
Double 21 is 42
"hello" is 5 bytes long
I don't know type bool!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🥱1
Стек — тип данных, основанный на принципе
Элементы стека связаны
Элемент, помещённый в
Операции:
pop — удаление верхнего элемента,
peek — возврат верхнего элемента без удаления.
Реализация на Go через срез:
type Stack struct {
items []int
}
func (s *Stack) Push(item int) {
s.items = append(s.items, item)
}
func (s *Stack) Pop() int {
if len(s.items) == 0 {
panic("Stack is empty!")
}
item := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
return item
}
func (s *Stack) Peek() int {
if len(s.items) == 0 {
panic("Stack is empty!")
}
return s.items[len(s.items)-1]
}
func (s *Stack) IsEmpty() bool {
return len(s.items) == 0
}
func (s *Stack) Size() int {
return len(s.items)
}
Мы использовали
Push
Pop
Peek
позволяет посмотреть Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🔥 Последняя неделя, чтобы забрать курс по AI-агентам по старой цене!
Пока вы тестируете Copilot, другие уже учатся строить AI-агентов, которые реально работают на бизнес. Хватит отставать!
Наш курс — это концентрат практики по LangChain и RAG. Улучшенная версия, доработанная по отзывам первого потока.
📆 Старт — 15 сентября.
💸 Цена 49 000 ₽ — только до 24 августа.
👉 Зафиксировать цену
Пока вы тестируете Copilot, другие уже учатся строить AI-агентов, которые реально работают на бизнес. Хватит отставать!
Наш курс — это концентрат практики по LangChain и RAG. Улучшенная версия, доработанная по отзывам первого потока.
📆 Старт — 15 сентября.
💸 Цена 49 000 ₽ — только до 24 августа.
👉 Зафиксировать цену
❤2
a := 5
b := 3
a = a + b // a становится 8
b = a - b // b становится 5
a = a - b // a становится 3
a
и b
меняются a := 5 // 0101 в двоичной системе
b := 3 // 0011 в двоичной системе
a = a ^ b // a становится 6 (0110)
b = a ^ b // b становится 5 (0101)
a = a ^ b // a становится 3 (0011)
func main() {
fmt.Println(swap())
}
func swap() []int {
a, b := 15, 10
b, a = a, b
return []int{a, b}
}
swap
a
и b
местами и возвращает Please open Telegram to view this post
VIEW IN TELEGRAM
😁8
⚡️ Бесплатный вебинар — прогнозируем цены и не сходим с ума
21 августа в 19:00 МСК будет бесплатный вебинар с Марией Жаровой — экспертом в ML и Data Science.
Тема:
Подробности рассказываю в гс выше — включай, чтобы не пропустить.
21 августа в 19:00 МСК будет бесплатный вебинар с Марией Жаровой — экспертом в ML и Data Science.
Тема:
«Введение в машинное обучение: как спрогнозировать стоимость недвижимости».
Подробности рассказываю в гс выше — включай, чтобы не пропустить.
Тест для 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
Cgo создаёт
Cвойства cgo:
• Встраивание
import "C"
• Доступ к именам из заголовков и
C
• Преобразования типов выполняются явно при переходе
C.*
к • Память: объекты,
C.free
, длительное хранение указателей на Go-память в package randc
/*
#include <stdlib.h>
*/
import "C"
func Random() int {
return int(C.random()) // C.long -> Go int
}
func Seed(i uint) {
C.srandom(C.uint(i)) // Go uint -> C unsigned int
}
Разбор примера:
•
import "C"
— • В
rand
C.random
и C.srandom
, C.uint(i)
и сам •
Random
вызывает random
из libc. В C long
(C.long
в cgo), int
перед •
Seed
принимает Go int
, приводит к C.uint
и передаёт в srandom
.• Комментарий непосредственно перед
import "C"
— C.*
.Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
11 сентября | 19:00
Офлайн в Москве | Онлайн
Кто выступит:
🔹Виталий Левченко, Engineering manager Wildberries проведет воркшоп на тему LLM для конкурентного Go кода;
🔹Владимир Марунин, Senior Developer Clatch, МТС Web Services расскажет про
эффективное использование sync.Map в Go;
🔹Роман Ерема, Developer MWS Cloud Platform поделится опытом разработки Cloud Controller Manager: интеграции Kubernetes с облаком MWS.
Для участия зарегистрируйся по ссылке.
До встречи на True Tech Go!
Офлайн в Москве | Онлайн
Кто выступит:
🔹Виталий Левченко, Engineering manager Wildberries проведет воркшоп на тему LLM для конкурентного Go кода;
🔹Владимир Марунин, Senior Developer Clatch, МТС Web Services расскажет про
эффективное использование sync.Map в Go;
🔹Роман Ерема, Developer MWS Cloud Platform поделится опытом разработки Cloud Controller Manager: интеграции Kubernetes с облаком MWS.
Для участия зарегистрируйся по ссылке.
До встречи на True Tech Go!
Go —
Разница между императивными и декларативными подходами заключается в том, как мы описываем поведение программы:
Характерные черты:
• Код состоит из
• Порядок
•
• Изменение состояния
Пример:
Please open Telegram to view this post
VIEW IN TELEGRAM