170 похожих чатов

Коллеги, вставил в структуру интерфейс с методами Value, Scan, в

базе (PostgreSQL) это поле JSONB и при селекте получаю ошибку:

sql: Scan error on column index 7, name "field_in_db": unsupported Scan, storing driver.Value type <nil> into type *InterfaceType

кто-нибудь сталкивался?

тут еще странно, что он звездочку перед именем интерфейса пишет...

38 ответов

29 просмотров

все сталкивались возвращай из Value строку, а не массив байт. ну или в запрос правильную конверсию воткни

Artur-Karapetov Автор вопроса
Daniel Podolsky
все сталкивались возвращай из Value строку, а не ...

в Value делаю Marshal и потом возвращаю string(b) . про запрос и правильную конверсию - не понял. можешь раскрыть пожалуйста?

Artur Karapetov
в Value делаю Marshal и потом возвращаю string(b) ...

Если поле jsonb+ pgx то func (s ProjectSettings) Value() (driver.Value, error) { return json.Marshal(s) } Если делать ресивер поинтер то вроде не работало

Artur-Karapetov Автор вопроса
Александр Костюченко
Если поле jsonb+ pgx то func (s ProjectSettings...

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

Artur Karapetov
я же же вроде написал, что есть эти методы. ресив...

ты выше ещё написал что через string(b) делаешь

Artur-Karapetov Автор вопроса
Artur Karapetov
попробуй еще раз прочесть

"в Value делаю Marshal и потом возвращаю string(b)"

Artur-Karapetov Автор вопроса
Artur-Karapetov Автор вопроса

я вставил в БД сущность где это поле nil и теперь не могу селектнуть это. в поле null в базе.

Artur Karapetov
я вставил в БД сущность где это поле nil и теперь ...

А причем тут Marshall тогда, если при селекте Scan вызывается с анмаршалом?

Artur-Karapetov Автор вопроса
Artur Karapetov
в Value делаю Marshal и потом возвращаю string(b) ...

решил, что лениться стыдно `values ($1, $2, $3::json)` вот $3 - как раз это Valuer

Artur-Karapetov Автор вопроса
Artur-Karapetov Автор вопроса
Daniel Podolsky
решил, что лениться стыдно `values ($1, $2, $3::j...

проблема в том что, делаю INSERT, у поля стоит DEFAULT NULL. Далее делаю SELECT и получаю эту ошибку… то есть дело не в Value, а в Scan.

Artur Karapetov
проблема в том что, делаю INSERT, у поля стоит DEF...

ну так ты сделай свой скан умнее 🙂 там все равно конверсия типа же из any перед unmarshal

Artur-Karapetov Автор вопроса
Artur Karapetov
проблема в том что, делаю INSERT, у поля стоит DEF...

и тут я понял, что дефолт для jsonb полей должен быть`{}`

то есть - придется тебе в запрос воткнуть возврат {} в случае, если там null

Artur-Karapetov Автор вопроса
Daniel Podolsky
то есть - придется тебе в запрос воткнуть возврат ...

вставка работает как часы. а вот Scan не хочет вообше. изменил DEFAULT на ‘{}’::jsonb получил ошибку unsupported Scan, storing driver.Value type []uint8 into type *InterfaceTypeName в Scan даже дебаг не залетает (

Artur-Karapetov Автор вопроса
Artur Karapetov
вставка работает как часы. а вот Scan не хочет во...

раскурил. chatpgtv4 мощь, если правильно задать вопрос

Artur-Karapetov Автор вопроса
Daniel Podolsky
и что ты раскурил?

Просто интерфейс вытащить из БД нельзя. Надо обернуть интерфейс в структуру. Для структуры реализовать методы Scan и Value. type Field interface {} type FieldValue struct {} func (f FieldValue) Value() {} func (f FieldValue) Scan() {} Вот щас эксперементирую, пока не проверил

Artur Karapetov
Просто интерфейс вытащить из БД нельзя. Надо обер...

У тебя как-то сложно, будто. // Value implements driver.Valuer interface. func (s ProjectSettings) Value() (driver.Value, error) { return json.Marshal(s) } // Scan implements sql.Scanner interface. func (s *ProjectSettings) Scan(src any) error { if src == nil { return nil } b, ok := src.([]byte) if !ok { return fmt.Errorf("invalid type: %T", src) } return json.Unmarshal(b, s) }

Artur-Karapetov Автор вопроса
Artur Karapetov
Просто интерфейс вытащить из БД нельзя. Надо обер...

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

Artur-Karapetov Автор вопроса
Александр Костюченко
Да

а у меня интерфейс

Artur-Karapetov Автор вопроса
Artur Karapetov
я с этого вопрос начал ツ

но это очевидно же! какой Scan ты рассчитывал, что позовется?

Artur-Karapetov Автор вопроса
Daniel Podolsky
но это очевидно же! какой Scan ты рассчитывал, что...

вообще в голове было что будет скан в интерфейс в пустой же интерфейс можно засканить? что-то типа того

Artur Karapetov
вообще в голове было что будет скан в интерфейс в...

в пустой можно, там на этот случай специальная обработка

Artur-Karapetov Автор вопроса
Artur-Karapetov Автор вопроса
Daniel Podolsky
так а какая? четы ждал?

что и в непустой будет также работать ツ

Artur-Karapetov Автор вопроса

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Всем привет!) я тут новенький и пытаюсь освоить evolution методом тыка. У меня при переходе между папками файлов выскакивают вот такие уведомления Можете подсказать как их от...
Диман Samoed
10
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Карта сайта