Aserción de tipo de Golang: implementación de Valuer y Scanner para tipos personalizados
Al trabajar con tipos personalizados en Go, como los basados en cadenas, Puede ser necesario implementar las interfaces Valuer y Scanner para interactuar con los controladores de la base de datos. Esto permite la serialización y deserialización de sus tipos personalizados hacia y desde los valores de la base de datos.
En el código proporcionado, se intentó implementar un tipo de rol y sus métodos de valorador y escáner asociados. Sin embargo, se encontró un error:
cannot convert value.(string) (type string) to type *Role
Para corregir este error, el método de escaneo se puede modificar de la siguiente manera:
func (r *Role) Scan(value interface{}) error { *r = Role(value.(string)) return nil }
Esta modificación garantiza que el valor recuperado de la base de datos se asigne correctamente al puntero de rol. Además, el método Valor debe tener la siguiente firma:
func (r Role) Value() (driver.Value, error) { return string(r), nil }
Tenga en cuenta que esta implementación no maneja ni produce valores NULL.
Si sigue estas sugerencias, puede implementar con éxito las interfaces Valuer y Scanner para sus tipos personalizados y permitir una interacción perfecta con los controladores de la base de datos. .
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3