
Daniel
10.09.2018
19:11:23
или парсить в два прохода, сначала
type MesStruct struct {
Type string `json:type`
}
а потом в соответствующую структуру

Roman
10.09.2018
19:14:03

Roman
10.09.2018
19:14:40

Google

Алексей
10.09.2018
19:22:22
Фух, спасибо, а то я уже подумал, что попал в чат не про пхп ❤️

Dk
10.09.2018
19:34:40
У меня тут ошибка странная
https://play.golang.org/p/Qi2EsosZgPA
Я что-то в синтаксисе не так сделал?

Daniel
10.09.2018
19:36:49
prog.go:41:56: expected type, found '}'
вы там хотели анонимный тип?

Dk
10.09.2018
19:44:42
Понял, починил
https://play.golang.org/p/wbpN49CCsH-
можно код ревью? (видел, что на стиль указания тегов ругается, а ещё что?)

Daniel
10.09.2018
19:48:34
а почему filteredLogs - map? там не подряд индексы?

Dk
10.09.2018
19:51:00
Я же сервисные сообщения пропускаю. И медиа/стикеры пропускаю. Только текст. Так что, индексы по порядку, но с пропусками. А вообще, думаю, это и правда не важно. Дата и время важнее будет.
if _, ok := mess.Text.(string); ok {
filteredLogs[mess.Id] = TL{mess.Text.(string), mess.From}
}
поменял на
if mTx, ok := mess.Text.(string); ok {
filteredLogs[mess.Id] = TL{mTx, mess.From}
}

Aleksandr
10.09.2018
19:57:48

Daniel
10.09.2018
19:59:35
но можно, наверное, использовать его, чтобы дернуть тип

Aleksandr
10.09.2018
20:00:21
да

in favor
10.09.2018
20:01:48
Ребята, может кто подсказать, очень часто возникают ошибки в кастомном HttpClient с такой конфигурацией:
client := &http.Client{
Transport: &nethttp.Transport{
&http.Transport{
DialContext: (&net.Dialer{
Timeout: 3 * time.Second,
KeepAlive: 10 * time.Second,
DualStack: true,
}).DialContext,
MaxIdleConns: 100,
IdleConnTimeout: 20 * time.Second,
TLSHandshakeTimeout: 1 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
},
},
}
Такой клиент создаётся на каждый запрос к серверу и посылает запрос на другой сервер. Локально не репродюсится, значит дело в нагрузке. Кто-то сталкивался с такой проблемой ?
Ошибка dial tcp: i/o timeout
В какой-то момент их может просто кучу насыпать, никак не зависит от других бекендов (другие бекенды в это время отвечают нормально, если руками пинговать).

Google

in favor
10.09.2018
20:06:52
Беглый гугл показал, что проблема в Диалере и ВОЗМОЖНО(!), что на каждый запрос создаётся новый клиент. Но без конкретики, пример одного комментария:
The transport caches the connections and the deadline expires fairly quickly. I have instead employed the client.Timeout "nuclear option" instead of the custom dialer, and it is looking good so far.

Bohdan
10.09.2018
20:07:44
драсте драсте
помогите с ишью в вайпере плюсиком, пожалуйста
Сильно нуждаюсь в кастомизации разделителя в конфигурации
https://github.com/spf13/viper/issues/170

Aleksandr
10.09.2018
20:07:59

in favor
10.09.2018
20:10:04

Dk
10.09.2018
21:19:43
Ой, а у меня ещё вопрос перед сном
А в чём разница между:
type MesStruct struct {
...}
type jslogs struct {
Messages []MesStruct `json:messages`
}
и
type MesStruct struct {
...}
type jslogs struct {
Messages []*MesStruct `json:messages`
}
В учебнике было со звёздочкой, я помню, что это указатель, но не понял в чем разница
Если бы я создал переменную такого типа и указал на неё, тогда понятно, но указатель на описание типа??

Alexy
10.09.2018
21:30:32
В первом случае слайс из messtruct, во втором слайс указателей на messtruct. *mesStruct тоже тип в данном случае.

Dk
10.09.2018
21:31:37
Спасибо

Pawel
10.09.2018
22:02:17

Nick
11.09.2018
04:40:51
Рефлексия обычно сильно медленнее, чем парсинг в заранее определенную структуру

Kevin
11.09.2018
06:26:04
Go выигрывает у php, если использовать в высоконагруженных сервисах?

Vadim
11.09.2018
06:27:02

Александр
11.09.2018
06:27:05
да

Alexander
11.09.2018
06:28:21
От рук зависит. Можно написать одинаково плохо

Александр
11.09.2018
06:28:55
hello world будет быстрее на go таки ?

Alexander
11.09.2018
06:29:15
а говорили, что Go намного хуже PHP, если плохо писать. На PHP работает, хоть и плохо, а на Go часто даже скомпилировать нельзя :(

Heathcliff
11.09.2018
06:30:33

Google

Alexander
11.09.2018
06:30:46
это он и есть :)
А вопрос, что быстрей - не звучит, как троллинг? :)

Alexander
11.09.2018
06:31:52
Кстати да, не написали скорость чего важна: программы или программиста
Или скорость превращения кода в не поддерживаемое ̶г̶о̶в̶н̶о̶ легаси

Pavel
11.09.2018
06:33:46
Ребята, может кто подсказать, очень часто возникают ошибки в кастомном HttpClient с такой конфигурацией:
client := &http.Client{
Transport: &nethttp.Transport{
&http.Transport{
DialContext: (&net.Dialer{
Timeout: 3 * time.Second,
KeepAlive: 10 * time.Second,
DualStack: true,
}).DialContext,
MaxIdleConns: 100,
IdleConnTimeout: 20 * time.Second,
TLSHandshakeTimeout: 1 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
},
},
}
Такой клиент создаётся на каждый запрос к серверу и посылает запрос на другой сервер. Локально не репродюсится, значит дело в нагрузке. Кто-то сталкивался с такой проблемой ?
Ошибка dial tcp: i/o timeout
У тебя тайм-аут три секунды ?

Alexander
11.09.2018
06:33:48

in favor
11.09.2018
07:15:37
У тебя тайм-аут три секунды ?
Не влияет ровным счётом. Бекенды работают как надо, и руками всегда отвечают вовремя. Но проблема именно в кастомном HttpClient.

Pavel
11.09.2018
07:41:07

Roman
11.09.2018
07:43:52

Maruf
11.09.2018
08:08:01
как можно группировать роуты без сторонних фреймворков
net/http

in favor
11.09.2018
08:09:13

Pavel
11.09.2018
08:11:06
Хватает ли пропускной способности для отправки запросов и получения ответов?


in favor
11.09.2018
08:13:05
А через клиент по умолчанию ошибки есть? ? Какой объём запросов в секунду исходящий?
Я же говорю, раньше мы использовали обычный http.Get, который вызывал DefaultClient.Do, который как бы был синглтоном для своего пакета (насколько я понял).
Сейчас ошибок меньше, но они всё равно присутствуют. Наш графкуель сервер обращается к трём бекендам, это просто невозможно, чтобы у всех трёх был этот таймаут на dial. это подтверждает то, что раньше с http.Get всё работало стабильно.
Нагрузка вообще слабая, около 10-20 запросов в секунду.

Pavel
11.09.2018
08:13:07
Последняя от версия го?

in favor
11.09.2018
08:13:28

Pavel
11.09.2018
08:14:03

Google

in favor
11.09.2018
08:14:14

Pavel
11.09.2018
08:14:26
Не создавайте.
Звучит так, что у вас с сетью не очень что-то и от большого количества установления подключений что-то тупит.
Создайте клиент один раз и дайте ему кешировать подключения к этим трём бекам.

Admin
ERROR: S client not available

in favor
11.09.2018
08:15:43
Не создавайте.
А есть какой-то аргумент, почему нельзя создавать каждый раз клиента? Мы, к сожалению, не смогли продебажить этот момент, вот и мечемся от одного "решения" к другому.

Pavel
11.09.2018
08:16:03
Keep Alive все дела.

in favor
11.09.2018
08:18:43
Keep Alive все дела.
? Спасибо, попробуем покопать в этом направлении.
Ещё у нас в одном методе делается resp, err := client.Do
И в этом же методе return resp.Body.
То есть, коллер не закрывает resp.Body, его закрывает другая функция, куда возвращается resp.Body.

Pavel
11.09.2018
08:19:18
Это нормально закрывать боди в другом месте. Главное не забыть его закрывать.

in favor
11.09.2018
08:19:23
Могут из-за утечки быть таймауты ?

Pavel
11.09.2018
08:19:30
Через defer например.
Но это нагрузка на сетевой стек, да.

in favor
11.09.2018
08:20:25

Pavel
11.09.2018
08:21:13
Ну вы всегда можете сделать netstat на хосте и посмотреть — может больше информации даст.

in favor
11.09.2018
08:30:42

Artem
11.09.2018
08:45:58

Google

Maruf
11.09.2018
08:47:01
ага

Александр
11.09.2018
08:56:41
посоветуйте mock для sql
что-то библиотек опять наплодили

Aleksandr
11.09.2018
09:42:09

Алексей
11.09.2018
09:42:53
У всех github мозги ебет?

Egor
11.09.2018
09:43:56
У меня окич

Anufant
11.09.2018
09:44:14
Не знаю, гитхаб ли это, но у меня пакет с gopkg.in не устанавливается =(

Ilia
11.09.2018
09:44:43
gopkg прилег
Точнее не может до гитхаба достучаться

Алексей
11.09.2018
09:45:42
Говорят, что гитхаб начал выкатывать новый интерфейс, мб дело в этом.

Nick
11.09.2018
09:46:08

Aleksandr
11.09.2018
09:47:17

Ed
11.09.2018
09:50:25
Привет всем. Может кто подсказать по пакету "go-dkim". Сгенерировал 2 ключа private/public.pem 1024 бит rsa, делаю подпись письма, на базе private.pem, вроде как в примере на github. На выходе, в почтовике пусто, такое впечатление что он даже ничего не делает.
Сам ключ пропускаю через:
private, _ := ioutil.ReadFile("private.pem")
block, _ := pem.Decode(private)
ну и в options.PrivateKey добавляю block.Bytes

Phil
11.09.2018
09:56:12
Смотрите. Есть xml:
<root>
<block>
<items>
<item>1</item>
<item>2</item>
</items>
</block>
<block>
....
Можно для стандартного декодера сделать структуру, чтобы он пропускал вот этот сраный 'items'?

in favor
11.09.2018
09:56:50
Привет всем. Может кто подсказать по пакету "go-dkim". Сгенерировал 2 ключа private/public.pem 1024 бит rsa, делаю подпись письма, на базе private.pem, вроде как в примере на github. На выходе, в почтовике пусто, такое впечатление что он даже ничего не делает.
Сам ключ пропускаю через:
private, _ := ioutil.ReadFile("private.pem")
block, _ := pem.Decode(private)
ну и в options.PrivateKey добавляю block.Bytes
обрабатывай ошибки, посмотри, может, что-то не так.