Dmitry
и делать это при чтении их в массив
Илья
ill-ya
обрабатываю и все
ill-ya
for i := 0; i < len(*b); i++ { - как то по тестам быстрее чем
ill-ya
for i := 0; i < count; i++ {
ill-ya
может такое быть?
Илья
*b - слайс?
Dmitriy
Всем доброго времени суток, есть проблема хочу сделать что то в таком духе
insNTitle = make(map[string]map[string]int)
и потом добавляю
for _, v := range gen.NODES{
insNTitle[m] = map[string]int{v.Title:{v.ID}}
}
Илья
len() отрабатывает за O(1) насколько я знаю, тк просто читает поле из структуры
Alexey
а что перебор так долго идет?
ill-ya
тут конечно надо думать - оптимизация зависит сильно от конкретной задача
ill-ya
ну как 80ms
ill-ya
это уже много
ill-ya
я хочу быстрее
Alexey
норм
Alexey
хотя...
Илья
сделай 4 горутины, разбей по 50 миллионов, собирай только индексы :)
Lev
можно вообще сделать битовую маску на [0..(N+7)/8] байт и при добавлении числа выставлять соответствующий бит. потом при проверке просто смотреть, есть ли соответствующие взведённые биты. перебор сократится многократно.
Lev
(то есть если у тебя есть маска #B#00100100# то тебе надо проверить все индексы, кратные 4 или 32)
Mannaro
Товарищи, подскажите, пожалуйста: есть ли возможность задать разные имена для marshal и unmarshal? У меня есть структура типа
type Test struct {
Type string json:"type"
Payload []NameGetter json:"payload"
}
type NameGetter interface {
GetName() string
}
и вот NameGetter реализует куча разных структур, которые определяются по типу в "Type". Если я просто запущу Unmarshal, то он выдаст ошибку о том, что невозможно анмаршлить в интерфейс. Поэтому пришлось сделать PayloadRaw []json.RawMessage + Payload []NameGetter, что очень неудобно, так как приходится в этой структуре все равно таскать этот PayloadRaw, который бы хотелось держать в отдельной переменной, а не структуре))
Mannaro
Или как можно анмаршалу сказать, что вот сюда не анмаршали?
Mannaro
причем в будущем будет нужна возможность обратно замаршалить, так что json:",-" не подойдет
Konstantin
Можно ли как то сделать выдачу от ошибок поподробнее? А то это смех какой-то.
2017/07/20 05:52:45 Get : unsupported protocol scheme ""
А о каком именно запросе и в каком месте программы неизвестно. Самому только логами засыпать все?
Aleksandr
Илья
Товарищи, подскажите, пожалуйста: есть ли возможность задать разные имена для marshal и unmarshal? У меня есть структура типа
type Test struct {
Type string json:"type"
Payload []NameGetter json:"payload"
}
type NameGetter interface {
GetName() string
}
и вот NameGetter реализует куча разных структур, которые определяются по типу в "Type". Если я просто запущу Unmarshal, то он выдаст ошибку о том, что невозможно анмаршлить в интерфейс. Поэтому пришлось сделать PayloadRaw []json.RawMessage + Payload []NameGetter, что очень неудобно, так как приходится в этой структуре все равно таскать этот PayloadRaw, который бы хотелось держать в отдельной переменной, а не структуре))
правильно ругается, откуда он знает, что там у тебя в интерфейсе, если бы он гарантировал marshal/unmarshal и сами объекты принимали решение о своеём поведении, это бы работало
Mannaro
Mannaro
как решить такую задачу-то?) А то текущий вид решения мне очень не нравится, а как сделать красиво пока не понимаю)
Илья
встрй в своё интерфейс marshaler/unmarshaler реализуй на объектах marshal/unmarshal и будет норм
Mannaro
Mannaro
Mannaro
или UnmarshalJSON надо создавать у структуры Test?
Илья
хм, кстати да, нафиг ничег оне встраивать а написать кастомный marshaler/unmarshaler для Test
Илья
:)
Илья
что реафкторить то?
Ashot
Ты уверен, что это тот код, о котором ты спраишваешь?
Илья
фигня какая-то, ну лишний тэг есть, что тут рефакторить?
Mannaro
хм, кстати да, нафиг ничег оне встраивать а написать кастомный marshaler/unmarshaler для Test
Все получилось, спасибо ;)
Но вот еще один кусок, который мне ну вообще не нравится, мб будут идеи?
switch item.Type {
case "opened":
var cur opened
// проверить error
json.Unmarshal(item.Data, &cur)
a.Data = cur
case "closed":
var cur closed
// проверить error
json.Unmarshal(item.Data, &cur)
a.Data = cur
}
closed & opened реализуют определенный интерфейс, а a.Data хранит в себе как раз этот интерфейс (объект, реализующий этот интерфейс), но вот приходится как попка-дурак писать почти одинаковые кейсы. Мб есть способ циклом?
Mannaro
или только кодогенерация?
Илья
json:"Color" лишний, насколько я помню, по дефолту так и переварит, вложить можно всё вообще в 1 структуру, если эти вспомогательные типы не нужны
Mannaro
@di3young таки есть идеи?)))
Mannaro
я пытался var cur interface{} вынести за switch, а в кейсах просто делать cur = opened{}, cur = closed{}, также весь остальной код вынес за пределы свитча вниз, но не зашло(
Илья
можно сделать cur = json.UnMarshaler какой нить
Илья
Unmarshaler точнее, и тогда должно заработать
Илья
хотя нет, фигня, а чем не сработал подход с interface{}?
Mike
Как получить имя юзера?
Aleksandr
Mike
I have just found it on the internet
Anonymous
В телеграме же ввели платежи? Можно запилить взнос за задавание простых вопросов, чтобы не ленились гуглить. 😄
Stepan
Stepan
Причём так что бы оплату его требовала какая нибудь влиятельная структура. Типа налоговой)
engelbart
Такс, нужна подсказка коллективного разума.
Юнит тесты юнит тестами, но вот захотелось мне и интеграционный тест тоже, с постгресом в докере все дела.
Я по колхозному то ручками умею.
А как оно по серьезному, у взрослых дядек?
Только CI ? Или есть чего попроще что б на моей машине во время разработки удобно запускать
Slava
интеграционный тест должен хоть где запускаться
Slava
CI это просто сервер с добавленной логикой
engelbart
А как их пишут, научите.
Мне надо что б поднялся некие посгрес, развернул там базу , как то залил данные из дамп, что б потом тесты приложения в него постучали запросами, сверили данные и всё что б погибло до следущего запуска
engelbart
Игорь. это всё уже есть, юнит тестами я обложен по самое не могу.
Этот этап я прошел.
Но мне теперь надо прогнатьь обязательно на реальной базе, и прогонять много и удобно.
engelbart
Могу вам привести пример если хоттите, у меня был один случай когда из за поля типа jsonb[] мок нормально работал а на реальной базе в продакшене всё упало. Нужно до продакшена, и даже до стейджина уметь погонять в интеграционные
Stepan
engelbart
аха, я предстваляю как это сделатьв каком нить travis но мне хочется как то сильно проще
Aleksey
Тоже интересно как это делается
Aleksey
В Джанго это из коробки работает
Мерль
[last news]
'go dep' now production ready
Мерль
* Звук вувузел *
Oleg
Ура! Надо будет попробовать
Oleg
Oleg
только тогда была самая первая версия
Oleg
Я не помню такого :) Было всякое, но dep не пробовали :)
Oleg
Godep был только :)
Oleg
Но эт другое
Dmitrii
как в го сделать подобие модуля синглтона? сорян за код, примерно так можно делать в js, есть к примеру модуль config, там я инициализирую объект, заполняю его данными из env, флагов, дефолтных значений и импортирую его потом по всех остальных файлах:
modules.exports = {db: 'pg'}
типо такого получается
как подобное делается на го?
Vsevolod
package config
var cfg *Config
type Config struct {}
func Get() *Config{
if cfg == nil {
cfg = &Config{}
}
return cfg
}
Dmitrii
спасибо
Dmitrii
а вообще если я пишу например rest апи, стоит ли разделять его внутри на packages? main/controllers/models/handlers/config, либо все в пакете main делают?
Vsevolod
в Go по стандарту переменная объявленная в пакете является статической, поэтому возможен синглтон.
Daniel
Daniel
и уж как он разделит - так и будет
Vsevolod
Зависит от сложности проекта. Если один хендлер - нет смысла особо :)