@gogolang

Страница 1385 из 1630
Daniel
10.09.2018
19:11:23
Ладно, сделаю в interface{}, а на разборе отфильтрую
не надо так. надо по-другому, с кастомным парсером, который парсит массив, но, если поле начинается с " - парсит его в строку, и из этой строки делает массив длиной 1

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

Roman
10.09.2018
19:14:03
зачем PHP если можно написать всё на Go?!
Php не очень быстро выводится из организма

Roman
10.09.2018
19:14:40
Php не очень быстро выводится из организма
надо прописать человеку Гофамина

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} }

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

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
Как мне представляется, он подходит для получения единичных значений без создания структуры. Таким макаром полноценный парсинг будет медленным, нет разве?
да, конечно. Ну у человека же речь не шла об оптимизации парсинга, вот я и исходил из самого протого решения. Уж если оптимизировать, то нужно видимо нечто с кодогенерацией. easyjson например

Как мне представляется, он подходит для получения единичных значений без создания структуры. Таким макаром полноценный парсинг будет медленным, нет разве?
ещё у него там есть Text interface{}, которую я бы заменил на Text fastjson.Object. И ксатти совсем не факт что парсинг с десериализацией через рефлексию будет в итоге быстрей

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

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

Александр
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 часто даже скомпилировать нельзя :(

Google
Alexander
11.09.2018
06:30:46
это он и есть :)

А вопрос, что быстрей - не звучит, как троллинг? :)

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

Или скорость превращения кода в не поддерживаемое ̶г̶о̶в̶н̶о̶ легаси

Alexander
11.09.2018
06:33:48
Go выигрывает у php, если использовать в высоконагруженных сервисах?
В общем, все согласны, что на Go разрабатывается намного быстрей, чем на C, и работает обычно сильно быстрее, чем на любых интерпретируемых языках.

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

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

net/http

in favor
11.09.2018
08:09:13
Ты тестировал с таймаутом 6 секунд? Количество ошибок ровно такое же?
У дефолтного клиента таймауты вообще дикие. 30 секунд. Сейчас поставили параметры DefaultClient, ошибки всё равно присутсвуют. Будто бы голанг как-то отрубает сам по желанию dial и выбрасывает таймаут.

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
Последняя от версия го?
Да, тег latest в докерфайле.

Google
Pavel
11.09.2018
08:14:26
Не создавайте.

Звучит так, что у вас с сетью не очень что-то и от большого количества установления подключений что-то тупит.

Создайте клиент один раз и дайте ему кешировать подключения к этим трём бекам.

Admin
ERROR: S client not available

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

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
Это нормально закрывать боди в другом месте. Главное не забыть его закрывать.
Он точно закрывается через defer, но закрывается не в коллере. Думал, может, в этом проблема.

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

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
Рефлексия обычно сильно медленнее, чем парсинг в заранее определенную структуру
че сказать хотел непонятно. json/encoding - это рефлексия и парсинг в определенную структуру. Но в данном случае это быстрее.

Алексей
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
че сказать хотел непонятно. json/encoding - это рефлексия и парсинг в определенную структуру. Но в данном случае это быстрее.
Скажем так, парсить структуру по сгенеренному автомату быстрее, чем используя рефлексию в рантайме, так понятнее?

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'?

Страница 1385 из 1630