Lev
но скорее всего заклоню ту либу, её гляну. и если там сильно замороченно будет - то плюну и на пистоне накарябаю. или забью вовсе. пушо jabber он хоть и есть везде, но не уверен, что в итоге будет отвчинка стоить выделки.
Lev
там просто решить хотелось чисто утилитарного уровня задачку: есть сайт (askmrrobot) который принимает на вход копипасту из игрушки, у себя её там обдумывает, и генерит другую пасту, которую вставлять в игрушку и -вуаля- герой в игрушке одет в самый сильный обвес, который только можно составить из имеющихся у него шмуток.
Sergey
А в Go я не могу в функцию ссылку передать?
Roman
можешь
Anonymous
а там нет доки( хотя если бы я потратил это время на изучение кода gox, то уже бы все сделал. но мы не ищем легких путей, да
Anonymous
точнее ищем
Roman
а с кем можно поговорить про rtb?
Roman
@onokonem ?
Daniel
можно со мной, да
🏳️ Phil
rtb это что?
Roman
rtb это что?
http://rtb-media.ru/wiki/
Vladimir
rtb это что?
realtime bidding?
Vladimir
yep
но к сожалению со мной о rtb врядли получится погворить. Я деталей того как их делают почти не знаю )
Vladimir
точнее даже совсем не знаю
Мерль
http://us11.campaign-archive2.com/?u=98e163a8883174330aa8e29f0&id=d9011b8078&e=3addecc86d
hamper 𓅝
а с кем можно поговорить про rtb?
Я тоже некоторые вещи оттуда иногда делаю.
Slach
=) всем привет а подскажите пожалуйста а по каким причинам может go bench не выходить из процесса хотя во время теста случился принудительный вызов panic(err) код выглядит примерно так if err := q.Exec(g.db_conn[i]); err != nil { panic(err) } панику в stderr рисует но из процесса не выходит почему ? ;) я понимаю что надо return nil, err правильнее, но конкретно в этом случае надо делать выход делать log.Fatal(err) тоже не очень хочется в этом месте
Yura
По-моему, тоже сталкивался, когда паник в коде случался. Не искал причину, починил паник.
Slava
Мерль
https://github.com/matthieudelaro/nut
Мерль
Nut is a command line tool which offers a solution to common frustrations of developers. It hides the complexity of development environments, and extends them with customizable macros. Whether you develop in Swift, Go, Java, or C++, what you need is build/run/test the app. So just do it: $ nut —init # create nut.yml file (equivalent of package.json for npm) $ nut build $ nut run $ nut test Nut mounts the current folder in a Docker container, and executes commands on your behalf, according to the project configuration. The configuration is read from nut.yml file, in the current/parent folder. You can choose the Docker image to use, declare volumes to mount, and define commands (called macros) such as build, run, and test. Nut also synchronizes timezone Nut is in early stage of development. It has been tested on Ubuntu, on MacOS with Docker for Mac and Docker Toolbox, and on Windows with Docker Toolbox. Feedbacks and contributions to add features and to improve Windows support are welcome.
Мерль
https://medium.com/@felipedutratine/iterative-vs-recursive-vs-tail-recursive-in-golang-c196ca5fd489#.5xhpn5mku
Мерль
Началась запись подкаста
Мерль
http://golangshow.com/online
Slava
интересный выпуск? стоит слушать?
Георгий
Привет всем. Народ пардон, но уже замучался искать. Я только начал обучение. Если не сложно, киньте ссыль или объяните значение функции len (((
Slava
https://golang.org/ref/spec#Length_and_capacity
Slava
всё в спецификации есть
Георгий
спс. Пошёл курить ))
Мерль
интересный выпуск? стоит слушать?
Пока не знаю, я принципиально слушаю только оффлайн
Anonymous
кто-нить знает чей это профиль? https://github.com/cxindex
Мерль
Нет
Sergey
Товарищи, помогите пожалуйста
Sergey
пытаюсь вникнуть в горутины и параллелизацию
Sergey
Есть код:
Sergey
func main() { go spinner(100 * time.Millisecond) time.Sleep(1000 * time.Millisecond) fmt.Println("Запустили и пошли дальше") const n = 40 fibN := fib(n) // slow fmt.Printf("\rFibonacci(%d) = %d\n", n, fibN) } func spinner(delay time.Duration) { for { for _, r := range `-\|/` { fmt.Printf("\r%c", r) time.Sleep(delay) } } } func fib(x int) int { if x < 2 { return x } return fib(x-1) + fib(x-2) }
Sergey
и есть вопрос по его работае
Sergey
go spinner(100 * time.Millisecond) - вот тут запускается типа анимация
Sergey
и когда рассчет числа фибоначчи закончен, она исчезает
Sergey
но вот стоит добавить time.Sleep(1000 * time.Millisecond) fmt.Println("Запустили и пошли дальше")
Sergey
как в выводе остается кусочек этой самой анимации
Sergey
\Запустили и пошли дальше Fibonacci(40) = 102334155
Sergey
Вот как-то так
Sergey
почему вывод горутины залазит в вывод Main()?
Daniel
так а почему не должен-то?
Daniel
что их синхронизирует?
Sergey
ну вот я не понимаю почему
Sergey
я понимаю, что крутилка завершится сразу после того как завершится main
Sergey
А почему я вижу \Запустили и пошли дальше а не Запустили и пошли дальше не понимаю
Sergey
если закоментить time.Sleep(1000 * time.Millisecond) fmt.Println("Запустили и пошли дальше")
Sergey
то Fibonacci(40) = 102334155 выводится без куска анимации
Sergey
блин
Sergey
\r
Sergey
вот почему
Anonymous
ага, тип fmt.Println("\rЗапустили и пошли дальше")
Sergey
происходит следующая фигня - горутина рисует себе анимашечку
Sergey
а когда доходит до "\r запустили дальше" каретка возвращается в начало строки
Sergey
и перетирает вывод анимашки
Anonymous
@pronin86 ага, так есть. А как тебе нужно? Или так и нужно? (кстати, как по мне, это очень хорошая программка-пример для того чтобы "вникнуть в горутины и параллелизацию")
nvkv
Котаны, привет. А подскажите пожалуйста убогому, как идиоматично заджойнить произвольное количество горутин? Например я на определенном этапе запускаю N горутин, мне надо дождаться, когда они все выполнятся и записать их результаты в слайс
nvkv
func (ts *TestSuite) Run() ([]TestResult, error) { tests, err := ts.GetTests() if err != nil { return nil, err } resultsChan := make(chan TestResult, len(tests)) for _, test := range tests { go runTest(test, resultsChan) } var results []TestResult for i := 0; i < len(tests); i++ { results = append(results, <-resultsChan) } return results, nil } У меня получилось вот так
nvkv
но я думаю я неправильно это делаю
Anonymous
можно через waitgroup
nvkv
Оно мне обеспечит только ожидание, а мне бы ещё сразу достать все результаты
nvkv
в принципе у меня тут и так ожидание за счёт блокировки каналом
nvkv
но меня смущает, что мне надо завязываться на число элементов в массиве тестов
nvkv
слайсе, извините
nvkv
если б я знал, как это сформулировать
nvkv
мне надо откалибровать идиометрометр
Daniel
вообще все, что касается синхронизации между горутинами, в go довольно кривое
Daniel
чего стоит WaitGroup хотя бы...
Daniel
так что тут любой велосипед годится
Daniel
но
Daniel
если речь об идеоматичности (узнаваемости), то окончание всех горутин надо по WaitGroup детектить
Daniel
и эту самую группу не в функцию передавать, а цеплять замыканием в анонимную обертку