Перейти к содержимому

Citydrive / Cитидрайв

Актуальность: 1 кв 2025

func main() {
data := map[int]bool{}
for i := 0; i < 10; i++ {
go func() {
data[i] = true
}()
}
time.Sleep(time.Second * 100)
for k, v := range data {
fmt.Println(k, v)
}
}
  • Что такое mutex? go/sync
  • Какие тут примитивы синхронизации можем использовать? go/sync
  • Что такое атомики? go/sync
  • Как решить на атомиках? go/sync
  • Как решить на каналах? go/channels
  • Каналы это, чем буферизированный от небуферизованного отличается? go/channels
  • Что такое мапа, синк мапа чем от мапы отличается? go/maps
func main() {
go func() {
fmt.Println(1)
}()
fmt.Println(2)
}
  • Как сделать так, чтобы явно у нас только одна отработала, без доработки программы? go/sync
  • Как доработать код, чтобы вывело оба числа? go/concurrency
  • Как работает планировщик, как устроены очереди? go/concurrency

Задача: Объединить все каналы в один. Если один канал закрывается, то необходимо все остальные закрыть. go/channels

Заголовок раздела «Задача: Объединить все каналы в один. Если один канал закрывается, то необходимо все остальные закрыть. go/channels»
func merge(channels ...chan int) <-chan int {}
func a(s []int) {
s = append(s, 37)
}
func b(m map[int]int) {
m[3] = 33
}
func main() {
s := make([]int, 3, 8)
m := make(map[int]int, 8)
a(s)
println(s[3]) // ?
b(m)
println(m[3]) // ?
}
type T []int
func (T) X() {}
func (*T) Z() {}
func main() {
var t T
t.X() // 1
t.Z() // 2
var p = &t
p.X() // 3
p.Z() // 4
T{}.X() // 5
T{}.Z() // 6
}

Задача: Нужно написать select который выведет значения в порядке, как в out. go/channels

Заголовок раздела «Задача: Нужно написать select который выведет значения в порядке, как в out. go/channels»
CREATE TABLE test_table (
id bigserial PRIMARY KEY,
name varchar(256)
);
in:
+----+-------+
| id | name |
+----+-------+
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
| 4 | name4 |
| 5 | name5 |
+----+-------+
out:
+----+-------+
| id | name |
+----+-------+
| 1 | name1 |
| 3 | name3 |
| 2 | name2 |
| 4 | name4 |
| 5 | name5 |
+----+-------+

Задача: Задача 7. Есть 5 экземпляров сервисов. На них крутится такой код. Нужно сделать так, чтобы раз в 5 секунд только на одном из инстансов выводилось Hello World. Предложить системное решение. go/basics

Заголовок раздела «Задача: Задача 7. Есть 5 экземпляров сервисов. На них крутится такой код. Нужно сделать так, чтобы раз в 5 секунд только на одном из инстансов выводилось Hello World. Предложить системное решение. go/basics»
func main() {
for range time.NewTicker(time.Second * 5).C {
fmt.Println("Hello World ")
}
}

Вопрос на тему распределенных блокировок.