@proGO

Страница 653 из 1674
Denis
05.06.2017
20:21:18
Не свои же коленочные архитектуры тащить

На хабре на такой щит насмотрелся, в том числе и на го, ща найду

https://m.habrahabr.ru/post/318720/ Вот тут человек cgi микросервисом называет модно

Google
Denis
05.06.2017
20:31:11
https://m.habrahabr.ru/post/260539/ Щас бы абстрагировать стандартный http и на выходе получить тот же самый интерфейс ??

Ilya
05.06.2017
21:34:34
Мне кажется большинство адекватных статей по го написаны на английском

На хабре как-то мало совсем

Ywein
05.06.2017
21:46:08
Возвращаясь к моим проблем с со сканированием данных в struct. Мне postgre из массива возвращает uint8 в котором закодирован json. Соответственно перед тем как сканировать это в стракт - нужно сконверить в массив строк. Кто-нибудь знает как это сделать на sqlx? я что-то не нашел в доках как делать пре-процессинг данных при StructScan

Все идеи как это решить выглядят ужасно криво

Все идеи как это решить выглядят ужасно криво
например создать поля типа uint8 в стракте, мапить данные в них, а потом в ручную переносить

Igor
05.06.2017
21:54:34
На хабре как-то мало совсем
пока на хабре напишут, пока гугл-яндекс это проиндексируют, статья успеет сто раз устареть, поддерживаю. нафиг хабр

Ilya
05.06.2017
21:56:22
Я сам каждый день индексирую хабр, зачем мне гугл? ;)

Sander
05.06.2017
21:59:40
кто-нибудь может по простому объяснить, как это работает? https://play.golang.org/p/zsy0-LmzN4 --- Не очень понимаю как вызывается ошибка/error, я вижу тут только какую-то магию.

Sander
05.06.2017
22:03:57
как он автоматически вызывает Error? я же не делаю ErrNegativeSqrt.Error()

Aleksandr
05.06.2017
22:05:25
как он автоматически вызывает Error? я же не делаю ErrNegativeSqrt.Error()
ты возвращаешь тип error. error реализуют интерфейс stringer (или как-то так) - у него есть метод String(), вовзвращающий Error(). Методом String() и пользуется Println для вывода строк

Google
Sander
05.06.2017
22:08:53
может не по той ссылке прошел

LexsZero
05.06.2017
22:08:55
type error interface { Error() string } емнип

Sander
05.06.2017
22:09:05
да я знаю, это я давно видел

подожди дай разобраться что мне выше написали

LexsZero
05.06.2017
22:10:14
емнип принтлн смотрит что ему передали еррор и сам дергает его за Error()

Sander
05.06.2017
22:10:34
ого, ничего себе

хмм

Aleksandr
05.06.2017
22:11:07
ого, ничего себе
да, String он не имплементирует, но println и то и то смотрит

Sander
05.06.2017
22:11:08
func Println(a ...interface{}) (n int, err error) { return Fprintln(os.Stdout, a...) }

просто запутанно сильно, что-то у меня туго идет все

LexsZero
05.06.2017
22:14:14
как и %v в fmt.Printf

Sander
05.06.2017
22:14:51
с python, php просто как-то проще было ))

Aleksandr
05.06.2017
22:14:59
case 'v', 's', 'x', 'X', 'q': // Is it an error or Stringer? // The duplication in the bodies is necessary: // setting handled and deferring catchPanic // must happen before calling the method. switch v := p.arg.(type) { case error: handled = true defer p.catchPanic(p.arg, verb) p.fmtString(v.Error(), verb) return case Stringer: handled = true defer p.catchPanic(p.arg, verb) p.fmtString(v.String(), verb) return } }

LexsZero
05.06.2017
22:15:42
ниасилил динамические языки, там компилятор по рукам не бьет

и надо головой думать поэтому

Sander
05.06.2017
22:16:44
это да

Ywein
06.06.2017
00:11:41
Короче я сдаюсь, похоже придется руками мапить результаты выдачи.

sqlx не хочет автоматически конверить массив куда надо

в pq это делается через .Scan(pq.Array(&x))

а там я толи не понимаю как это подставить, то ли что-то не работает

Google
hamper ?
06.06.2017
09:13:45
А как логичнее сконвертить одну структуру в другую, если обе описывают один и тот же жсон (теги совпадают), но поля разные? На сколько я понимаю struct -> json -> struct2 совсем хрень, просто перебрать все поля через рефлексию и по совпадающим тегам скопировать значения?

Daniel
06.06.2017
09:37:57
зачем через рефлексию?!

напишите конвертер руками, не ленитесь

Denis
06.06.2017
09:39:34
конвертер действительно проще, чем учитывать все ейдж кейсы рефлексии

nn008783
06.06.2017
09:51:45
о, вы че еще живы шоле

Semen
06.06.2017
10:55:26
yep

hamper ?
06.06.2017
11:20:54
напишите конвертер руками, не ленитесь
Просто там структура на пару сотен полей.

Vladimir
06.06.2017
11:22:18
hamper ?
06.06.2017
11:22:56
Кодогенерация рулит.
Это ж еще и кодогенератор писать, хотя наверное единственный нормальный вариант.

Kirill
06.06.2017
11:24:42
Это ж еще и кодогенератор писать, хотя наверное единственный нормальный вариант.
Если надо производительность - то это оптимальный вариант.

Vladimir
06.06.2017
11:24:49
Это ж еще и кодогенератор писать, хотя наверное единственный нормальный вариант.
Он должен быть крошечный. Строк на 30-50 подозреваю, если типы структур захардкодить, и через рефлексию сделать.

Michael
06.06.2017
11:26:53
? велосипеды

Michael
06.06.2017
11:27:15
а маппера поле-на-поле структуры ещё не написали?

hamper ?
06.06.2017
11:27:49
Ну вообще, если уж точно говорить, то мне надо https://developers.google.com/ad-exchange/rtb/downloads/openrtb-proto.txt превратить в https://github.com/bsm/openrtb

Точнее данные из структур которые генерятся на основе первого переложить в структуры второго.

Kirill
06.06.2017
11:30:13
а маппера поле-на-поле структуры ещё не написали?
Так пжалста, только все через рефлексию

Michael
06.06.2017
11:50:12
mapstructure is a Go library for decoding generic map values to structures and vice versa, while providing helpful error handling. оно?

Илья
06.06.2017
13:00:41
А подскажите утилитку, которой скармливаешь директорию проекта, а она показывает количество строк кода?

Ywein
06.06.2017
13:02:12
woohoo, решил проблему с которой вчера мучался(маппинг данных из БД в структуру, при том что в данных из БД - есть постгресовские массивы).

все просто

Google
Ywein
06.06.2017
13:02:58
нужно всего лишь использовать вместо Data []string - Data pq.StringArray

Admin
ERROR: S client not available

Илья
06.06.2017
13:04:46
Ywein
06.06.2017
13:06:18
А ну, рассказывайте
Я взял sqlx. И оно замечательно все делает через StructScan. За исключением того, что постгресовский массив возвращается в качестве []uint8, а в структуре у меня []string. Если не использовать sqlx и делать все руками то там это будет .Scan(pq.Array(&myStruct.Data)) Но мне очень не хотелось мапить данные руками А если делать .StructScan(&myStruct) - то я получал сообщение о том, что в общем запихать []uint8 в []string - нельзя.

Вот эта проблема решается использованием pq.StringArray в качестве типа данных

Ywein
06.06.2017
13:07:00
там внутри все обработки делаются

Kirill
06.06.2017
13:07:40
Народ, а кто-нибудь в продакшне использует sqlx?

Ywein
06.06.2017
13:08:04
Ну понятно. Я думал что-то свое написали.
Не, все намного скучнее. Но тут нужно учитывать что я пользуюь Go аж третий день)

Kirill
06.06.2017
13:08:35
Не, все намного скучнее. Но тут нужно учитывать что я пользуюь Go аж третий день)
Ну я вот тоже писал на го третий день и тоже встал выбор - рефлексия или кодогенерация.

anton
06.06.2017
13:10:02
Илья
06.06.2017
13:11:15
Еще такое есть - https://github.com/AlDanial/cloc
Вот это поинтереснее, спасибо)

Sergey
06.06.2017
13:15:07
Вот эта проблема решается использованием pq.StringArray в качестве типа данных
я вот так писал field *[]string `pg:",array" и pg.Array, соответственно, в скане отлично работало

Ywein
06.06.2017
13:16:16
я вот так писал field *[]string `pg:",array" и pg.Array, соответственно, в скане отлично работало
pq.Array и у меня работало. Я хотел чтобы оно автоматически все делало, а не по одному полю

Kirill
06.06.2017
13:17:00
И к чему пришли?
Кодогенерация интереснее как задача и в плане производительности. Взять sqlx и просто засунуть данные в стракт это прям совсем простой путь.

Ywein
06.06.2017
13:19:29
Кодогенерация интереснее как задача и в плане производительности. Взять sqlx и просто засунуть данные в стракт это прям совсем простой путь.
Честно говоря нигде никогда не пользовался кодогенерацией. Не особо представляю с какой стороны к этому подходить вообще.

Google
Artem
06.06.2017
13:53:36


Имеется проект с вот такой вот структурой. В sector.go определяется тип Sector, в server.go я пишу import "sector" и создаю объект через s := new(Sector). При запуске голанг ругается на то, что "sector" подключен, но не юзается и на то, что "Sector" undefined



Новенький в голенге

Vadim
06.06.2017
13:57:09
Кот

Artem
06.06.2017
13:58:26
Только что дошло. Надо было в книгу смотреть внимательней

Artem
06.06.2017
13:58:34
там надо было короче sector.Sector

Aleksandr
06.06.2017
13:58:56
у тебя почему-то пакеты в src, а server.go выше на уровень
хотя пох. в таком случае src - это пакет

Artem
06.06.2017
13:59:28
Я бы за то, чтобы вообще без src быть

Но го так не считает

Aleksandr
06.06.2017
13:59:59
Я бы за то, чтобы вообще без src быть
в таком случае src должен быть корнем кода, а не как у тебя

Artem
06.06.2017
14:00:27
Да, сейчас сделаю

Страница 653 из 1674