«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как правильно реализовать Valuer и Scanner для пользовательских типов в Go?

Как правильно реализовать Valuer и Scanner для пользовательских типов в Go?

Опубликовано 18 ноября 2024 г.
Просматривать:751

How to Correctly Implement Valuer and Scanner for Custom Types in Go?

Утверждение типа Golang: реализация оценщика и сканера для пользовательских типов

При работе с пользовательскими типами в Go, например, основанными на строках, может потребоваться реализация интерфейсов Valuer и Scanner для взаимодействия с драйверами базы данных. Это обеспечивает сериализацию и десериализацию ваших пользовательских типов в значения базы данных и обратно.

В предоставленном коде была предпринята попытка реализовать тип роли и связанные с ним методы Valuer и Scanner. Однако возникла ошибка:

cannot convert value.(string) (type string) to type *Role

Чтобы исправить эту ошибку, метод Scan можно изменить следующим образом:

func (r *Role) Scan(value interface{}) error {
    *r = Role(value.(string))
    return nil
}

Эта модификация гарантирует, что значение, полученное из базы данных, будет правильно присвоено указателю роли. Кроме того, метод Value должен иметь следующую сигнатуру:

func (r Role) Value() (driver.Value, error) {
    return string(r), nil
}

Обратите внимание, что эта реализация не обрабатывает и не создает значения NULL.

Следуя этим предложениям, вы можете успешно реализовать интерфейсы Valuer и Scanner для ваших пользовательских типов и обеспечить плавное взаимодействие с драйверами базы данных. .

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3