
some_random_anonymous
21.10.2018
18:45:29

Vladimir
21.10.2018
18:45:42
если ухо с помощью селекта может не блочиться то рот будет однозначно ждать ухо

Google

Vladimir
21.10.2018
18:48:08
можешь идти к вейтгруппам и воркерам

Daniel
21.10.2018
18:49:09

ivan
21.10.2018
18:49:55
да, весьма давно правда это было, и на udemy еще курс, но тоже достаточно давно ;)

Daniel
21.10.2018
18:51:31
тогда вы должны понимать, что вопрос "каналы блокируют основной поток?" смысла не имеет

Vladimir
21.10.2018
18:51:50

ivan
21.10.2018
18:53:09
Не всегда выходит, го не для работы использую а так, для себя, непривычно работть с такой моделью асинхронного выполнения

Vladimir
21.10.2018
18:54:34

Roman
21.10.2018
19:05:43
Камрады, подскажите go deb это теперь официальна тулза?

Daniel
21.10.2018
19:06:15
:)
для начала - dep
потом - нет, и уже не станет
и, наконец, официальным будет vgo, но пока он на стадии эксперимента

Roman
21.10.2018
19:15:20
Извините, буква перевернулась

Google

Roman
21.10.2018
19:15:28
А что не так с dep ?

Daniel
21.10.2018
19:16:07
ну - он он оказался не в русле
с ним все хорошо, просто go team взяла курс на отказ от вендоринга

Roman
21.10.2018
19:19:19
Хм, значит и сам каталог vendor тоже не в русле ?

Pavel
21.10.2018
19:20:16
Фигово быть go team. ? Отказаться от вендоринга до 2 версии все равно не смогут.

Мерлин
21.10.2018
19:21:23
"Fuzzing, the new unit testing",
Dmitry Vyukov, The Bug Slaughterer
https://go-talks.appspot.com/github.com/dvyukov/go-fuzz/slides/fuzzing.slide

Daniel
21.10.2018
19:21:57

Alexey
21.10.2018
19:47:23
С dep на данный момент проблем нет, а вот с vgo... не так просто полностью на него перейти, только с нуля не используя сторонних пэкэджей

Daniel
21.10.2018
19:50:09
это правда

Aleksandr
21.10.2018
20:03:20

Alexey
21.10.2018
20:19:41
что это значит?
Ну, может это со мной проблемы. Но я пробовал несколько раз на vgo перейти полностью, у меня только с простым проектом без зависимостей это получилось. И то я всё время забываю как это пишеца это GO111VENDOR... или как там правильно, на ноуте поставил на постоянно, всё сломал пару раз :)

Aleksandr
21.10.2018
20:22:55
ну конкретики нет. У меня есть опыт около десятка проектов. Не все миграции гладко прошли, но проблем, связанных именно с go modules не было.

Alexey
21.10.2018
20:25:28
Нужно опытом поделиться с другими, может?

Vladimir
21.10.2018
20:26:41
воздушно капельным?

Daniel
21.10.2018
20:26:46

Aleksandr
21.10.2018
20:26:55
так чем делиться? все по инструкции. Размещаешь вне GOPATH, go mod init и смотришь ошибки все просто
генераторы? линтеры?
это да. но есть косвенные косяки когда dep понимает github.com/Package как github,com/package а go mod нет

Alexey
21.10.2018
20:29:13

Aleksandr
21.10.2018
20:29:33
я так понимаю github.com/sirupsen/logrus раньше был github.com/Sirupsen/logrus и в старых либах он фигурирует под вторым именем. dep кушает такое, а go mod нет. go mod replace спасает

Google

Alexey
21.10.2018
20:30:42

Aleksandr
21.10.2018
20:31:36
поясни

Serg Podtynnyi
21.10.2018
20:37:28
Привет всем, для программирования на других языках использую Atom, но на го у меня там как-то не пошло, теперь использую GoLand, есть какие-нибудь советики или известные проблемы с этим?

Alexey
21.10.2018
20:38:02
Есть проекты зависящие от моих же пэкэджей, я боюсь вот так вот просто выносить эти пэкэджи наружу. Но видимо это проблема от того что я на домашнем окружении полностью хотел на vgo перейти, а на рабочем оставлял как есть, а правки рабочие нужно делать срочно, прямо сейчас.

Serg Podtynnyi
21.10.2018
20:41:01

Aleksandr
21.10.2018
20:41:34

Serg Podtynnyi
21.10.2018
20:42:01
Я чуть-чуть пока не разобрался как правильно настраивать билд таргеты, но дебагер вроде работает и это супер.

Alexey
21.10.2018
20:43:34
Вобщем про реплэйс надо посмотреть, я мало вникал, видимо

Aleksandr
21.10.2018
20:51:10
Всмысле с относительным путём?
В смысле ты можешь один пакет на лету менять на другой, причем другой может быть локальными. Указываешь не репозиторий, а локальный путь

Pavel
21.10.2018
21:00:01
всем привет!
подскажите, почему я получаю вот такую ошибку
Unsolicited response received on idle HTTP channel starting with "HTTP/1.0 408 Request Time-out
смотрел дамп трафика, там действительно была tcp сессия с сервером, но http запроса не было
повторяется когда запускаю много поток, в один поток такой ошибки нет

Alexey
21.10.2018
21:01:16

Daniel
21.10.2018
21:02:46

Aleksandr
21.10.2018
21:02:48
не помню. навреняка можно
там же еще появилась новая фича goproxy. Можно с ее помощью вести разработку
https://github.com/zelenin/go-mod-proxy
я бойлерплейт сделал

Pavel
21.10.2018
21:04:55

Google

Alexey
21.10.2018
21:11:30

Wingman
21.10.2018
21:11:44
гм
а нормально ли, что потребление cpu с рейс детектором и без отличается на порядок?
иногда и почти на два

Alexey
21.10.2018
21:12:09

Wingman
21.10.2018
21:12:17
гм
=\
с -race в топе висят __tsan_read, racecall, __tsan_write, racecalladdr
что и навело на мысль убрать его нафиг
с -race жрёт ~2000% cpu (24 проца), без него - 80-150% :)

Alexey
21.10.2018
21:16:14

Pavel
21.10.2018
21:16:32
это я понял, я использую net/http и не могу понять что ему мешает сделать запрос

Vladimir
21.10.2018
21:17:53

Pavel
21.10.2018
21:22:01
я делаю так
client := &http.Client{
Timeout: timeout,
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
}}
resp, err := client.Get(url)

Vladimir
21.10.2018
21:24:47
хотя бы поcледнюю строчку в рутину
resp, err := client.Get(url)

Pavel
21.10.2018
21:25:26
ну у меня этот код в функции, а функцию я уже вызываю с go

Vladimir
21.10.2018
21:29:23
resp.Body.Close() не забываете?
выбираете все за раз
htmlData, err2 := ioutil.ReadAll(resp.Body)

Pavel
21.10.2018
21:34:27
как то так
func worker(id int, jobs <-chan string, results chan<- string) {
for url := range jobs {
client := &http.Client{
Timeout: timeout,
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
}}
resp, err := client.Get(url)
if err != nil {
fmt.Println(url, err)
continue
}
defer resp.Body.Close()
switch resp.StatusCode {
// тут отлавливаю некоторые ошибки
}
results <- "done"
}
}
func main() {
for w := 1; w <= flow; w++ {
go worker(w, jobs, results)
}
for _, url := range *l {
jobs <- url
}
close(jobs)
for a := 1; a <= len(*l); a++ {
<-results
}
}

Vladimir
21.10.2018
21:37:37
то есть вы не читаете содержимое страниц?

Pavel
21.10.2018
21:38:15
нет, только код

Google

Vladimir
21.10.2018
21:38:38
body.Close() не желательно в defer, так как закрытие может быть по разным причинам
вставьте чтение тела иначе неисповедимы пути господни когда вы ооставляете в сокете непрочтенные данные

Pavel
21.10.2018
21:42:04
ок, попробую, спасибо

Vladimir
21.10.2018
21:44:23
хотя если последней командой будет resp.Body.Close()
оно просигнализирует что непрочитанное удалить

ivan
21.10.2018
21:44:58
Динамически создавать каналы и затем обрабатывать каждый по отдельности это нормально? (типа такого https://codeshare.io/5MZeA3 )
Почему общий?

Pavel
21.10.2018
21:48:32

ivan
21.10.2018
21:48:44
нет, там слайс каналов

Vladimir
21.10.2018
21:58:54
зачем то res слайс , чтоб выводить не-по-человечески?
зачем то
for i, fn := range funcs {
channels = append(channels, make(chan int))
go fn(channels[i])
}

ivan
21.10.2018
21:59:44
это для примера, меня больше интересует делают ли так на практике

Vladimir
21.10.2018
22:00:04
если уже вы индекс ввели зачем вам range?
for i:=0;i<len(funcs);i++

ivan
21.10.2018
22:01:10
тогда зачем вообще эта конструкция?)