golang type aserción: manejo de la base de datos Tipo Conversiones
en Go, los tipos de afirmaciones nos permiten convertir un valor a un tipo diferente basado en su tipo real. Esto es útil cuando se trabaja con tipos dinámicos o implementa interfaces personalizadas.
Considere un escenario en el que creamos un tipo personalizado llamado rol basado en una cadena y deseamos usarlo con un controlador de base de datos. Para hacer esto, necesitamos implementar las interfaces Valorer and Scanner.
, al implementar estas interfaces, podemos encontrar el error:
cannot convert value.(string) (type string) to type *Role
[&] para la función de escaneo: [&] [&] de una base de datos. El problema surge porque estamos tratando de convertir el valor de la cadena de tipo de tipo directamente a un puntero de rol. En su lugar, debemos desferir el puntero R y asignarle el valor de valor, como:
func (r *rol) scan (interfaz de valor {}) error { *r = rol (valor. (cadena)) regresar nulo }
func (r *Role) Scan(value interface{}) error { *r = Role(value.(string)) return nil }
La función de valor se usa al insertar o actualizar datos en una base de datos. La firma incorrecta se proporcionó anteriormente. La firma correcta es:
func (r rol) valor () (controlador.value, error) { String de retorno (r), nil }Tenga en cuenta que esta función no maneja o produce valores nulos.
func (r Role) Value() (driver.Value, error) { return string(r), nil }siguiendo estas correcciones, podemos implementar con éxito la conversión de tipo para nuestro tipo de rol personalizado cuando trabajamos con controladores de bases 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