golang українською
79 subscribers
10 photos
1 video
60 links
Telegram автора: @nesymno
Linkedin автора: bit.ly/nesymno-linkedin
Github каналу: bit.ly/uagolang-github
Download Telegram
Всім привіт! Буду іноді закидати вам задачки. Якісь складні, якісь легкі - різні.
Почнемо з легкого, отже, що виведе даний код?
Чи бачите ви тут якісь помилки? Які? Як виправити і чому вони виникають?
Які потенційні проблеми в коді (в цьому, неправильному варіанті) ви бачите?

Playground: https://goplay.tools/snippet/VWtsgqD0_a6

Відповіді пишіть в коментарях та прикріплюйте також посилання на playground, як у мене.

package main

import (
"fmt"
"math/rand"
"sync"
"time"
)

func worker(id int, tasks <-chan int, results chan<- int, wg *sync.WaitGroup) {
defer wg.Done()

for task := range tasks {
delay := time.Duration(rand.Intn(300)) * time.Millisecond
time.Sleep(delay)

select {
case results <- task * 2:
fmt.Printf("Worker %d processed task %d\n", id, task)
case <-time.After(100 * time.Millisecond):
fmt.Printf("Worker %d timeout on task %d\n", id, task)
}
}
}

func main() {
rand.Seed(time.Now().UnixNano())
taskCount := 10
workerCount := 3

tasks := make(chan int, taskCount)
results := make(chan int, taskCount)

var wg sync.WaitGroup

for i := 1; i <= workerCount; i++ {
wg.Add(1)
go worker(i, tasks, results, &wg)
}

for i := 1; i <= taskCount; i++ {
tasks <- i
}
close(tasks)
close(results)

wg.Wait()

for res := range results {
fmt.Println("Result:", res)
}
}


#practice@uagolang #trytosolve@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
Доброго ранку, колеги 🫡👋

Екватор тижня починаємо із задачки на слайси в Go. Я би не сказав, що вона дуже складна, але чітко демонcтрує розуміння їх роботи.
Якщо ще й прокоментуєте рішення (код) - буду подвійно вдячний 🎶

Playground: https://goplay.tools/snippet/dK00TwKkib2
Рішення: ти бач які розумецькі! Вирішуй задачу, а не морозся 😄

package main

import (
"fmt"
)

/*
🏆 Задача: імплементуйте функцію CloneAndModify(original []int) ([]int, []int), яка:
- Робить повну копію слайсу original
- Змінює лише копію — кожен елемент множиться на 2

↪️ Повертає два слайси:
1. Незмінений оригінал
2. Модифікована копія

⚠️ Умова:
- Якщо після змін копії змінюється і оригінал — значить копію зроблено неправильно
*/

func main() {
original := []int{1, 2, 3, 4, 5}
o, c := CloneAndModify(original)

fmt.Println("original:", o)
fmt.Println("copy:", c)
}

func CloneAndModify(original []int) ([]int, []int) {
// напиши код тут

return original, nil
}


Чекаю на відповіді в коментарях!

#practice@uagolang #trytosolve@uagolang #slices@uagolang
———————
golang українською
🇺🇦
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1