Mush
11.01.2018
16:43:00
HexToAddress
Timophey
11.01.2018
16:44:45
да
ты гений )
спасибо )
Google
Mush
11.01.2018
16:45:23
ты еще вскоре наткнешься на то, что geth падает с ошибкой где-то раз в неделю и ему надо занулять базу
https://github.com/ethereum/go-ethereum/issues/15408
поэтому надо их держать штук 5, чтобы до восстановления хотя бы 2 рабочих оставались
я кстати делал туда мерж реквест https://github.com/vincentserpoul/go-ethereum/commit/c4a9ebacd11dd9ada77f792e943b6f7230ab5521
с фиксом очевидной паники
но эти пока не делали релиз с этим, так что можно получить этот код только если вручную билдить код из мастера
Timophey
11.01.2018
16:54:27
ты точно гений ) спасибо )
Mush
11.01.2018
16:57:50
Ну я рад что хоть кто-то похожим занимается. Когда я месяц назад спрашивал по этой теме, то тут были сплошные шуточки
Timophey
11.01.2018
16:58:57
)
ну) мне очень тоже приятно )
Alexander
11.01.2018
17:52:48
А у меня нода никак синкануться не могла(
Andrey
11.01.2018
17:56:53
Подскажите как стандартным контекстом отменить write в сокет?
Sergius
11.01.2018
17:57:05
Приветы блокчейнерам ?
Google
Ivan
11.01.2018
18:18:44
приветы. майним дальше
Sergey
11.01.2018
18:23:46
Под солярку на спарке компилил кто ?
Sergius
11.01.2018
18:24:09
Ну при чём здесь майнинг и блокчейн. ?
Slava
11.01.2018
18:26:02
у нас в прокопьевске пол города были майнерами
хотя до сих пор, наверное, так
anton
11.01.2018
18:32:35
майнеры, это которые в качестве IDE топят за RubyMine?
Andrew
11.01.2018
18:33:33
Майнеры - не люди!
anton
11.01.2018
18:33:53
Andrew
11.01.2018
18:34:23
Alex
11.01.2018
22:08:05
Пайк прогнулся :)
Vladimir
11.01.2018
22:37:57
о, круто! Осталось дождаться когда udp, unix socket и tcp начнут удовлетворять Listener interface'у
(или какие там с ними проблемы сейчас?)
Andrew
12.01.2018
04:14:01
12.01.2018
04:34:34
как тут дебажить? О_о
у меня ошибка во время аплоада 0x5dfcf0
?
Andrew
12.01.2018
04:53:22
Но можешь и printf'ами ))
12.01.2018
05:16:20
Google
Andrew
12.01.2018
05:17:34
12.01.2018
05:25:57
а, я тупой
надо было заюзать panic(err)
пофиксил уже))
Как сделать так чтобы при создании этой структуры мапа requestParams сразу создавалась? чтобы не писать в функции make(map[string]string)
Valerka
12.01.2018
05:50:32
Почему не пойти простым путём и не сделать функцию newMyStruct которая будет возвращать объект структуры с созданной мапой
12.01.2018
05:52:56
Igor
12.01.2018
06:58:18
Valerka
12.01.2018
07:03:27
Igor
12.01.2018
07:04:01
Так оно и самое правильное)
Valerka
12.01.2018
07:04:40
ну вот и мне так оно кажется)
Mush
12.01.2018
10:49:33
Коллеги, посоветуйте как можно решить след. задачку.
У меня есть работа с несколькими апи. У каждого апи свой клиент со своим интерфейсом.
Я реализовал функционал обертку, который позволяет оперировать пулом подключений к апи в виде вызова лямбда ф-ций.
someApi1.call(func(api1Client *api1Client){
err = api1Client.call1();
if err !=nil {
return err
}
return nil
} error)
someApi2.call(func(api2Client *api2Client){
err = api2Client.call1();
if err !=nil {
return err
}
} error)
Проблема в том, что из-за разных типов клиентов api1Client и api2Client мне приходится дублировать данный функционал.
Как бы вы сделали данную реализацию, чтобы не дублировать код?
я могу сделать там interface{} в параметрах, тогда в самой ф-ции надо кастовать в нужный тип, чем не хочется заниматься
Aleksandr
12.01.2018
10:55:06
Не совсем понял, но может хранить пул более низкоуровневых http request?
Ну ты понял, вызовы http клиента, а не обертки над ним
Mush
12.01.2018
10:57:40
cчитай что api1Client и api2Client это вообще не похожие типы, которые даже прикладным протоколом не пересекаются. что в принципе и есть так ? так что про http тут, к сожалению, речь идти не может
обертка делает то, что подбирает из пула нужный клиент.
и для двух типов клиентов приходится задублировать этот функционал подбора из-за разных типов
Andrei
12.01.2018
11:00:11
рефлексия или кодогенерация)
"42" в мире го
Aleksandr
12.01.2018
11:04:31
Google
Aleksandr
12.01.2018
11:04:55
а, хочется держать пул реквестов разных протоколов?
ну тогда да, тысячу раз обсуждали
Mush
12.01.2018
11:06:24
суть в том что в обертку вынесена логика подбора и итерирования по пулу клиентов.
скажем так это что-то вроде умного лоад-балансера.
и хочется ее юзать для разных типов клиентов.
и не хочется из-за разности типов для каждого типа писать копию этой логики.
Andrew
12.01.2018
11:07:35
Mush
12.01.2018
11:08:23
Andrew
12.01.2018
11:08:55
Мб запилить через интерфейсы? И в функции большой case для каждого типа.
Aleksandr
12.01.2018
11:09:32
Andrei
12.01.2018
11:09:44
Mush
12.01.2018
11:10:48
Мб запилить через интерфейсы? И в функции большой case для каждого типа.
ф-ции в принципе одноразовые, тк передаются через параметры, те там даже не кейс а просто каст к конкретному типу. тк передавать ф-ции будет код, который работает с конкретным типом клиента. Это реализуемо. Но мне кажется может быть по-проще и попрямее и без интерфейсов. Но придумать не могу.
Andrew
12.01.2018
11:12:13
Aleksandr
12.01.2018
11:13:23
кстати, давали ссылку на что-то типа 50 мест где можно выстрелить себе в ногу (про го речь).
вот тут же я стреляю в ногу:
_, err := db.DbConnection.Query("select 1 from "+entity+" where slug = $1 limit 1", slug)
rows не беру из результата выполнения запроса и соотственно не закрываю его?
Alexei
12.01.2018
11:14:24
есть же Exec
Aleksandr
12.01.2018
11:14:45
Alexei
12.01.2018
11:14:54
или если одну строку, то QueryRow
Aleksandr
12.01.2018
11:14:55
вернет ErrNoRows или nil
Alexei
12.01.2018
11:15:33
если QueryRow - то вернет ErrNoRows, если строки нет
Aleksandr
12.01.2018
11:16:29
Google
Alexei
12.01.2018
11:16:45
доки вообще никто не читает?
Mush
12.01.2018
11:17:11
ошибку и после exec можно получить ведь, не надо обязательно результат получать. разве нет?
Aleksandr
12.01.2018
11:17:15
Alexei
12.01.2018
11:17:38
if err = db.QueryRow("select slug where....", slug).Scan(&slug); err == sql.ErrNoRows { bla-bla-bla }
jack
12.01.2018
11:17:49
Ребята, давайте жить дружно!
Andrew
12.01.2018
11:17:54
Aleksandr
12.01.2018
11:18:20
Alexei
12.01.2018
11:18:41
слушай, ты вопрос прочел?
прочел, хз, что будет с потеряным rows, поскольку ты его не перебираешь в последнем Next не вызывается Close
с Exec - не знаю, вернется ли ошибка
Aleksandr
12.01.2018
11:19:12
Alexei
12.01.2018
11:19:23
МНТ же
Mush
12.01.2018
11:19:50
_, err := repo.db.Exec(
“…”)
if err != nil {
чем это не решение?
Aleksandr
12.01.2018
11:20:19