
Grigoriy
24.05.2018
09:32:45

Vasily Romanov
24.05.2018
09:36:24
про каскад подумайте


Maksim (Ellrion)
24.05.2018
09:40:23
Всем привет! Подскажите, пожалуйста. Уровень - только учусь (возможно, при просмотре кода потребуется храбрость). На Playground работу продемонстрировать не удалось, так что на правах псевдокода: https://play.golang.org/p/0FMCYvjId59
Пункт В - ожидаем, пока данные передадутся в канал для обработки, все просто
Пункт С - ожидаем, пока горутины обработают все данные в каналах (len будет нулевой)
Пункт А - вот в нем как раз проблема. Во время работы горутины наступает ситуация, когда данные взяты из канала inputs (и его длина становится 0), но еще не обработаны, а горутина showData взяла данные из канала results и тоже обнулила его длину.
То есть, горутина всё еще работает, а процесс считает себя завершенным и уходит.
Решить это таймаутами - смахивает на костыль и не дает гарантий. Еще один канал или WaitGroup для синхронизации - не уверен. Подскажите, пожалуйста, как будет правильее?
раз у вас уже используется WaitGroup почему не использовать ее на каждую горутину (и filler и worker и showData)?


Grigoriy
24.05.2018
09:41:48

Google

Grigoriy
24.05.2018
09:42:37

Maksim (Ellrion)
24.05.2018
09:44:06
Не понимаю. Можете чуть описать, пожалуйста?
делайте wg.Add(1) для каждой горутины а не 1 (ну или сразу add 3)
ну и defer wg.Done() в worker и showData добавить а не только в filler
ну и в main уже не нужно проверять каналы на пустоту. только wg.Wait()
а то у вас сейчас вэйт груп не груп вовсе)
ну и сделайте чтение из каналов везде через for range

Grigoriy
24.05.2018
09:48:10

Илья
24.05.2018
09:49:14

Maksim (Ellrion)
24.05.2018
09:49:15

Grigoriy
24.05.2018
09:51:52
Большое спасибо @rvasily, @ellrion и @di3young! Ну и всем остальным. Люблю этот чатик, всегда получается уйти не только с ответом на вопрос, но и пониманием :)

Maksim (Ellrion)
24.05.2018
09:53:45
только пока у вас 1 воркер всё это выглядит бесполезным)
но наверное это будет не так в реальном приложении

Daniel
24.05.2018
09:54:39
я там слегка поправил стиль, чтобы было по феншую

Google

Grigoriy
24.05.2018
09:56:13

Daniel
24.05.2018
09:57:14

Grigoriy
24.05.2018
09:57:53

Daniel
24.05.2018
09:59:50
у нас в results пишут - потенциально - несколько воркеров. поэтому ни один из них закрыть его не может. поэтому используеся wg. а вот filler у нас один, поэтому окончание его работы обозначается закрытием inputs.

Grigoriy
24.05.2018
10:00:20

Daniel
24.05.2018
10:01:50
кстати, мой вариант с ошибкой - у меня все заканчивается дедлоком
main стоит на wg.Wait(), showData стоит на чтении из results. домашнее задание - модифицировать программу так, чтобы обошлось без дедлока :)

Grigoriy
24.05.2018
10:06:39

Stanislav
24.05.2018
10:27:03
товарищи, а swaggo с echo использовал кто-нибудь? У меня css/js не применяется, но подгружается, это я что-то не так сделал, или echo-swagger надо как-то поправить?

Denis
24.05.2018
10:59:37
привет всем! есть пакет для работы с картинками(изменение размеров, обрезание и т.д.), есть пакет для работы с соц.сетями(статистика и т.д.). Есть структура, которая подготавливает картинку для постинга в соц.сети(добавляет ватермарк и прочее). Как думаете, такую структуру стоит разместить в пакете с картинками или в пакете с соц.сетями?

Александр
24.05.2018
11:00:09
конечно в соц сети
она же привязана к ним, а не к картинкам

Denis
24.05.2018
11:03:33
спасибо!) я сначала тоже подумал, что очевидно что в соц.сети, с другой стороны логика-то по преобразованию картинки кажется что должна быть в пакете с картинками)

Daniel
24.05.2018
11:04:46
я бы сложил в отдельный пакет, если честно.

Artem
24.05.2018
11:31:17
+ за отдельный

Александр
24.05.2018
11:47:32
сложнааа ?

Denis
24.05.2018
12:13:49
я бы сложил в отдельный пакет, если честно.
а как эти трое будут расположены относительно друг друга? совсем на верхний уровень выносить не хочется, а то получится nodejs-стайл с пакетом на каждую маленькую функцию. и короткое очевидное название(типа social, images) подобрать сложно

Zaur
24.05.2018
12:20:00
Editor
PhotoEditor

Sergey
24.05.2018
12:20:45
imageconv скорее какой-нибудь

Google

Denis
24.05.2018
12:20:57
Editor
короткое, но не очевидное :)

Sergey
24.05.2018
12:21:15

Andrey
24.05.2018
15:01:00
Ребят, а скиньте, плиз, репу какого-либо крупного проекта использующего go-kit

Max
24.05.2018
15:21:26
привет, есть объект m[string]interface{}
unmarshalled из []byte.
я знаю что по определенному ключу interface{} это некая струкутра. Как мне анмаршилить интерфейс в эту структуру?
без того что бы маршлить его обратно в []byte ?
и оттуда опять анмаршалить в структуру

The
24.05.2018
15:22:28
описать у структуры json.Unmarshaler
Точно не помню, но вроде работал вариант.

Илья
24.05.2018
15:25:55
анмаршали в json.RawMessage
а потом по ключу анмаршали дальше
т.е. map[string]json.RawMessage и даьше сам

Max
24.05.2018
15:58:29
так не получится, структура map[string]interface{} задана уже библиотекой

Илья
24.05.2018
15:58:59
тогда только через []byte

Max
24.05.2018
15:59:33
т е фактически из interface{} в структуру можно конвертировать только через
marshaledInterface := json.Marshal(myInterface)
json.Unmarshal(marshaledInterface, &myStruct)
?
както убого

Илья
24.05.2018
15:59:51
тк внутри interface{} будут map[string]interface{}, все числа будут float64 и все такое
попробуйте не использовать библиотеку? :)

Artem
24.05.2018
16:00:57

Max
24.05.2018
16:01:45

Илья
24.05.2018
16:02:09

Google

Илья
24.05.2018
16:02:41
я сейчас к ней враппер навернул с нормальным пробросом контекста

Max
24.05.2018
16:05:13

Илья
24.05.2018
16:05:36
не паблик, я и врапаю только интересные мне куски
думаю, попозже сяду и переделаю всю либу, может и в паблик закину, у них, на мой вкус, ужасный дизайн API (я начал делать свой тк open trace не работал, тк они плохо пробрасывают контекст) + все очень неудобно, не расширяемо. Другой вопрос - кому это нужно :)

Admin
ERROR: S client not available

Max
24.05.2018
16:14:44
)))

The
24.05.2018
17:32:05
кто-то знает, можно ли в либе github.com/tealeg/xlsx джойнить ячейки?

Alexey
24.05.2018
17:34:48

The
24.05.2018
17:34:59
обертка, это которая excelize?

Tom
24.05.2018
18:15:11
Кто-нибудь знает хорошую книгу/курс/вотэва, чтобы вкатиться за месяц в правильное развертывание приложения на Ubuntu Server?
Регулятор требует одну систему держать только на bare bone. Мы наймем специалиста, но я хочу для себя, чтобы говорить с ним на 1 языке.
Спасибо.

Petr
24.05.2018
18:19:53
Непонятно, что вы хотите, CI/CD, make или как устанавливать убунту сервер?

Tom
24.05.2018
18:21:32
Сделать вэб-сервер на Убунте.

Petr
24.05.2018
18:22:48
apt install nginx php7-fpm apache2
выбирайте на любой вкус и цвет
фри

Александр
24.05.2018
18:36:03
использовать crypto/rand для генерации строк конечно было мудро
пока я не посмотрел на результат...
s(\��� n

Антон
24.05.2018
18:41:43
Ах, если бы можно было генерировать строки из заданного набора символов с однородным распределением и с помощью криптографически стойкого генератора случайных чисел. Но это только мечты...

Google

Александр
24.05.2018
18:45:49
почему не?

Илья
24.05.2018
18:53:47
https://stackoverflow.com/questions/32349807/how-can-i-generate-a-random-int-using-the-crypto-rand-package
:O

Александр
24.05.2018
19:40:41
а насколько корректно такой счетчик RPS?
var counter int32
ticker := time.NewTicker(time.Second * 1)
go func() {
for range ticker.C {
fmt.Println("RPS", atomic.LoadInt32(&counter))
atomic.StoreInt32(&counter, 0)
}
}()
потом в лупе просто atomic.AddInt32(&counter, 1)
в конце каждой итерации

Vadiimmm:-)))
24.05.2018
19:43:01

Alexey
24.05.2018
20:12:55

Alexey
24.05.2018
20:21:18
https://t.me/golangshow

Alexey
24.05.2018
20:23:41

Alexey
24.05.2018
20:24:05
В России VPN _нужен_

Александр
24.05.2018
20:24:49
так так!
в флуд плиз

Vadiimmm:-)))
24.05.2018
20:25:16

Александр
24.05.2018
20:25:31
я там почистил немного, теперь меньше срачей за Украину