"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo implementar correctamente el valorador y el escáner para tipos personalizados en Go?

¿Cómo implementar correctamente el valorador y el escáner para tipos personalizados en Go?

Publicado el 2024-11-18
Navegar:162

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

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. .

Último tutorial Más>

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