

Мерлин
25.01.2017
15:50:22
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
Началась запись подкаста

Google

Мерлин
25.01.2017
17:41:54
http://golangshow.com/online

Slava
25.01.2017
18:41:24
интересный выпуск? стоит слушать?

Makoklyuy
25.01.2017
19:18:17
Привет всем. Народ пардон, но уже замучался искать. Я только начал обучение. Если не сложно, киньте ссыль или объяните значение функции len (((

Slava
25.01.2017
19:18:52
https://golang.org/ref/spec#Length_and_capacity
всё в спецификации есть

Makoklyuy
25.01.2017
19:19:11
спс. Пошёл курить ))

Мерлин
25.01.2017
19:24:45

Peter
25.01.2017
19:29:16
кто-нить знает чей это профиль? https://github.com/cxindex

Мерлин
25.01.2017
20:25:31
Нет

Sergey
25.01.2017
20:34:03
Товарищи, помогите пожалуйста
пытаюсь вникнуть в горутины и параллелизацию
Есть код:
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)
}

Google

Sergey
25.01.2017
20:34:43
и есть вопрос по его работае
go spinner(100 * time.Millisecond) - вот тут запускается типа анимация
и когда рассчет числа фибоначчи закончен, она исчезает
но вот стоит добавить
time.Sleep(1000 * time.Millisecond)
fmt.Println("Запустили и пошли дальше")
как в выводе остается кусочек этой самой анимации
\Запустили и пошли дальше
Fibonacci(40) = 102334155
Вот как-то так
почему вывод горутины залазит в вывод Main()?

Daniel
25.01.2017
20:46:12
так а почему не должен-то?
что их синхронизирует?

Sergey
25.01.2017
20:52:03
ну вот я не понимаю почему
я понимаю, что крутилка завершится сразу после того как завершится main
А почему я вижу \Запустили и пошли дальше а не Запустили и пошли дальше не понимаю
если закоментить
time.Sleep(1000 * time.Millisecond)
fmt.Println("Запустили и пошли дальше")
то Fibonacci(40) = 102334155 выводится без куска анимации
блин
\r
вот почему

Richard
25.01.2017
21:00:58
ага, тип fmt.Println("\rЗапустили и пошли дальше")

Sergey
25.01.2017
21:41:08
происходит следующая фигня - горутина рисует себе анимашечку

Google

Sergey
25.01.2017
21:41:28
а когда доходит до "\r запустили дальше" каретка возвращается в начало строки
и перетирает вывод анимашки

Richard
25.01.2017
22:17:56
@pronin86 ага, так есть. А как тебе нужно? Или так и нужно? (кстати, как по мне, это очень хорошая программка-пример для того чтобы "вникнуть в горутины и параллелизацию")

Semyon
26.01.2017
09:16:58
Котаны, привет. А подскажите пожалуйста убогому, как идиоматично заджойнить произвольное количество горутин?
Например я на определенном этапе запускаю N горутин, мне надо дождаться, когда они все выполнятся и записать их результаты в слайс
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
}
У меня получилось вот так
но я думаю я неправильно это делаю

i
26.01.2017
09:19:31
можно через waitgroup

Semyon
26.01.2017
09:20:51
Оно мне обеспечит только ожидание, а мне бы ещё сразу достать все результаты
в принципе у меня тут и так ожидание за счёт блокировки каналом
но меня смущает, что мне надо завязываться на число элементов в массиве тестов
слайсе, извините

Daniel
26.01.2017
09:24:32

Semyon
26.01.2017
09:24:42
если б я знал, как это сформулировать
мне надо откалибровать идиометрометр

Daniel
26.01.2017
09:25:42
вообще все, что касается синхронизации между горутинами, в go довольно кривое
чего стоит WaitGroup хотя бы...
так что тут любой велосипед годится
но

Admin
ERROR: S client not available

Google

Daniel
26.01.2017
09:27:00
если речь об идеоматичности (узнаваемости), то окончание всех горутин надо по WaitGroup детектить
и эту самую группу не в функцию передавать, а цеплять замыканием в анонимную обертку
тогда всем сразу будет видно, что происходит

Semyon
26.01.2017
09:28:55
Вот, понял, спасибо тебе, добрый человек Данил
Я тут в итоге прочитал про "фьючи" в го
это когда ты возвращаешь канал после запуска горутины
получается довольно удобненько

Slava
26.01.2017
13:05:16
лучше не возвращать канал, а передавать в горутину канал
таким образом можно контролировать буфер этого канала снаружи
ну или написать небольшую обвязку, где будет скомпонован канал и context

Semyon
26.01.2017
13:06:20
ну в целом я так и сделал
var futures []chan TestResult
for _, test := range tests {
c := make(chan TestResult)
go func(t TestFile) {
result, err := t.Run()
if err != nil {
log.Println(err)
}
c <-result
}(test)
futures = append(futures, c)
}
var results []TestResult
for _, c := range futures {
results = append(results, <-c)
}

Сергей
26.01.2017
15:40:12
странный вопрос в этой ветке
но все же
может кто знает есть ли группа где можно задать вопрос по awk
?

Alexander
26.01.2017
15:53:43
стековерфлоу? а что за вопрос?

Yura
26.01.2017
15:54:03
google - вот эта группа

Alexander
26.01.2017
15:56:33
ну телеграм для оффтопа плохо подходит, это в слеке можно уйти в рендом а там в отдельный тредик :)

Daniil
26.01.2017
15:56:49

Сергей
26.01.2017
15:57:35
спасибо
попробую

Slach
26.01.2017
15:57:46

Daniel
26.01.2017
15:58:46
а?!

Google

Daniel
26.01.2017
15:58:56
пример чего?
замыкания?

Daniil
26.01.2017
16:00:11
А чего?)
*забрал себе стикеры*

Slach
26.01.2017
16:46:25
в waitgroup.Add чтоли передавать замыкание само? или как?