
Sergey
13.01.2018
14:54:08
Кидай запросы параллельно
Пиши их в канал потом все

me
13.01.2018
14:54:19
да struct я так и сделал

Sergey
13.01.2018
14:54:27
Доставай из канала и сортируй как надо

Google

me
13.01.2018
14:54:37
но я не пойму как в цикле делать каналы и потом из них чиатть
и как-то дождаться всех ответов
там типа wg.wait()
мне нужен только один канал или массив?

Sergey
13.01.2018
14:55:52
Смотря что ты хочешь делать
Прочитай про chan
Как они работают

me
13.01.2018
14:56:21
да вот читал, с одним я работать понимаю как, а вот с массивом - нет. Вот я тут и спрашиваю

Sergey
13.01.2018
14:56:39
Ну кинь код свой, давай напишу

me
13.01.2018
14:56:49
допустим у меня есть метод fetch(url, index, ch) и есть urls массив
я в цикле for index,url:=range urls { go fetch(url, index, ch) }
вот только в for я не понимаю как сделалть этот вот ch и как потом из него прочитать

Google

Sergey
13.01.2018
14:58:18
Горутина отдельная с циклом пока не получили все записи
И бери из канала каждый раз
<-ch

me
13.01.2018
14:58:45
а горутьиана на каждый запрос тоже нужна?
мне нужно сделать только один канал? ch := make(chan Response, len(urls))?

Sergey
13.01.2018
15:01:14
https://tour.golang.org/concurrency/4
https://tour.golang.org/concurrency/2

me
13.01.2018
15:02:01
https://tour.golang.org/concurrency/2
ch := make(chan FeedResponse, len(urls))
for index, url := range urls {
go GetFeed(url, index, ch)
}
for res := range ch {
fmt.Println(res)
}
close(ch)
Вот так все работает только программа не завершается. Что не так?

Александр
13.01.2018
15:10:14
ну так канал то не закрыт

Sergey
13.01.2018
15:10:19

Александр
13.01.2018
15:10:24
он и крутит в бесконечном цикле

Sergey
13.01.2018
15:11:02

me
13.01.2018
15:11:23
что значит закрыть канал?
close(ch) там ведь есть, или это не то?

Александр
13.01.2018
15:11:56
так он после цикла

me
13.01.2018
15:11:58
а, в цикле нужно закрыть? Тогда как определить что все закрыл?

Александр
13.01.2018
15:12:01
а цикл не завершается

me
13.01.2018
15:12:03
что все получил

Александр
13.01.2018
15:12:16

Google

Sergey
13.01.2018
15:13:41
Дочитай до конца
Ну один в один там

me
13.01.2018
15:14:50

Sergey
13.01.2018
15:15:32

me
13.01.2018
15:15:43
x, y := 0, 1
for i := 0; i < n; i++ {
c <- x
x, y = y, x+y
}
close(c)
ну тут ведь когда прошел цикл и все передано в канал вызывается close

Sergey
13.01.2018
15:16:06
Ну смотри тогда wait group)))

me
13.01.2018
15:16:20
ну вот :) Я об этом сначала и спрашивал?
ладно. Всем спасибо. Разобрался
если кому интересно, получилось вот так
func GetFeeds(urls []string) [][]byte {
length := len(urls)
results := make([][]byte, length)
ch := make(chan FeedResponse, length)
for index := 0; index < length; index++ {
go GetFeed(urls[index], index, ch)
}
for index := 0; index < length; index++ {
res := <-ch
results[res.Index] = res.Body
}
close(ch)
fmt.Println(len(results))
return results
}
ну чтобы без waitgroup обойтись

me
13.01.2018
15:34:25
что самое прикольное в js это одна строчка. Хоть конечно там не thread а event loop
Promise.all(urls.map(getFeed)).then(sortedArrayOfResponses)

Alexander
13.01.2018
21:15:54

mozomig
13.01.2018
21:16:00
Ребят как заставить го складывать бины в $GOPATH/bin, щас он кидает тупо в $GOPATH

Alexander
13.01.2018
21:16:23

mozomig
13.01.2018
21:16:32
в $PATH прописал $GOPATH/bin

Alexander
13.01.2018
21:19:26
$GOBIN = $GOPATH/bin

Google

Alexander
13.01.2018
21:20:20
мб у тебя где-то он уже прописан на каталог $GOPATH
и тупо туда устанавливает
https://golang.org/cmd/go/#hdr-GOPATH_environment_variable

mozomig
13.01.2018
21:21:09
не помогло
ааа понял косяк

me
13.01.2018
21:23:20

Admin
ERROR: S client not available

mozomig
13.01.2018
21:23:26
надо не go build а go install, сорян
ребят подскажите у кого опыт есть, как лучше организовать общение между микросеврисами на го, просто через http rest или кто-то способ получше знает?

Vladimir
13.01.2018
21:25:35
Grpc

me
13.01.2018
21:25:40
Socket, rpc?

mozomig
13.01.2018
21:28:54
ну а плюсы есть какие-то по отношению к http рест?

Vladimir
13.01.2018
21:31:56
Полноценный РПЦ вот

Marlik
13.01.2018
21:35:17

Vladimir
13.01.2018
21:37:08
А graphql?
Несколько не в месте взаимодействия между серверами

Marlik
13.01.2018
21:37:30
А клиент - сервер, что юзают?

mozomig
13.01.2018
21:42:32

Google

Marlik
13.01.2018
21:43:01
Понятно.
У graphql что с безопасностью?

mozomig
13.01.2018
21:44:08

Marlik
13.01.2018
21:45:18

mozomig
13.01.2018
21:46:14

Marlik
13.01.2018
21:48:17
Плят, https://gobyexample.ru/ умер по ходу.

Aleksandr
13.01.2018
21:50:32

Marlik
13.01.2018
21:52:13
Это понятно, но можно всё по чуть-чуть и запросить)

Aleksandr
13.01.2018
21:54:50

Marlik
13.01.2018
21:55:10
А почему не конвертится? Отдельно каждый байт конвертить нужно?
type IPAddr [4]byte
func (i IPAddr) Stringer() string {
v := string(i)
return v
}

Aleksandr
13.01.2018
21:55:38

Marlik
13.01.2018
21:56:55
cannot convert i (type IPAddr) to type string как-то так...

Aleksandr
13.01.2018
21:58:15
а если так: return string([]byte(i))

Marlik
13.01.2018
21:59:10
cannot convert i (type IPAddr) to type []byte

Aleksandr
13.01.2018
22:01:41
string(i[:])

Marlik
13.01.2018
22:02:38
Ага, супер, работает))
Чот никак не доходило что мона срез заюзать.

Sergey
13.01.2018
22:14:59
type Book struct {
isbn string json:"isbn"
title string json:"title"
author string json:"author"
}
book := Book{isbn:"1234", title:"Call of Cthulhu", author:"Lovecraft"}
json.NewEncoder(os.Stdout).Encode(book)
Выводит в терминал {}. Написал имена полей структуры с заглавной буквы и всё вывело должным образом. Это так и должно работать?