Size: a a a

2020 April 24

A

Aikidos in Go-go!
Артем Рудяк
я изначально неправильно скинул, изменил канал теперь обычный
Хитро. Чтобы мы сразу не догадались, какая у тебя ошибка
источник

OK

Oleg Kovalov in Go-go!
Артем Рудяк
люди, объясните плиз в чем ошибка
package main

import (
 "fmt"
 "sync"
 "time"
)

func main() {

 cities := []string{"London", "Paris", "Berlin", "Rome", "Madrid"}
 channel := make(chan string)
 startMultipleGoRoutines(channel, cities)

 for v := range channel {
   fmt.Println(v)
 }
}

func startMultipleGoRoutines(channel chan<- string, cities []string) {
 defer close(channel)
 var wg sync.WaitGroup
 wg.Add(len(cities))
 for _, v := range cities {
   go func(city string) {
     time.Sleep(time.Second)
     channel <- fmt.Sprintf(v + "1")
     wg.Done()
   }(v)
 }
 wg.Wait()
}
ну вот плейграунд тыкает, что используется v когда должно быть city
источник

А

Артем Рудяк... in Go-go!
Aikidos
Хитро. Чтобы мы сразу не догадались, какая у тебя ошибка
копи паст он такой, бывает)
источник

OK

Oleg Kovalov in Go-go!
дедлок в том, что startMultipleGoRoutines блокируюшая (wg.Wait() в конце), и пока он не пройдет - цикл в main не запустится.

а цикл и не запустится, ведь горутины ждут, пока из канала кто-то вычитает
источник

OK

Oleg Kovalov in Go-go!
сделай go startMultipleGoRoutines(channel, cities)
и будет счастье
источник

OK

Oleg Kovalov in Go-go!
и v убери из горутины в fmt.Sprintf
источник

OK

Oleg Kovalov in Go-go!
кстати там Sprintf не нужен, Sprint хватает
источник

OK

Oleg Kovalov in Go-go!
Aikidos
Не увидел дедлока. Проверил, на плейграунде всё работает.
как у тебя код заработал?
источник

А

Артем Рудяк... in Go-go!
не совсем понял твоё предложение, ведь задача в том чтобы в цикле писать в один поток, а в мэйне из потока забирать
источник

А

Артем Рудяк... in Go-go!
Oleg Kovalov
как у тебя код заработал?
допёр, заработал
источник

OK

Oleg Kovalov in Go-go!
👌
источник

А

Артем Рудяк... in Go-go!
спасибо)
источник

A

Aikidos in Go-go!
Oleg Kovalov
как у тебя код заработал?
v на city заменил и всё
источник

OK

Oleg Kovalov in Go-go!
Aikidos
v на city заменил и всё
сделал так же - дедлок, кек
источник

A

Aikidos in Go-go!
Oleg Kovalov
сделал так же - дедлок, кек
он в начале код скинул без дедлока)
источник

A

Aikidos in Go-go!
с буф. каналом
источник

А

Артем Рудяк... in Go-go!
Aikidos
он в начале код скинул без дедлока)
блин ну я ж извинился)
источник

A

Aikidos in Go-go!
Артем Рудяк
блин ну я ж извинился)
не, прост все уже успели разные версии поюзать))
источник

OK

Oleg Kovalov in Go-go!
а ок
источник

МП

Мимо Проходящий... in Go-go!
@onokonem как вам такая задачка для собеседования на Го (доп. условие - без бесконечных циклов в функциях zero odd even) https://leetcode.com/problems/print-zero-even-odd/

У меня из 15 человек решил только 1
источник