En Go existen operadores a nivel de bits y cambios en los genéricos que conviene dominar. Aquí explico de forma clara y práctica cómo funcionan el operador complemento bit a bit, el operador AND NOT y el uso del tilde en restricciones de genéricos desde Go 1.18 en adelante.
Operador complemento bit a bit ^: aplica la negación bit a bit sobre el valor. Por ejemplo, con x := 5 // 00000101 el complemento ^x produce 11111010 si se interpreta como byte. Interpretado como uint8 resultaría 250, y como int8 sería -6 debido al complemento a dos. Es importante recordar que el resultado depende del tipo subyacente y de si el tipo es firmado o no.
Operador AND NOT &^: se usa para borrar bits. Dos patrones comunes son flags |= mask para establecer bits y flags &^= mask para borrar bits. También se puede voltear todos los bits con flags = ^flags. Estas operaciones son útiles para controles de permisos, máscaras y manipulación eficiente de flags.
Ejemplo típico de máscaras de permisos: const ReadPermission = 1 << 0 // 00000001 const WritePermission = 1 << 1 // 00000010 para quitar WritePermission se puede usar allExceptWrite := ^WritePermission o más habitualmente flags &^= WritePermission según el caso.
Genéricos y el operador tilde ~: Go 1.18 introdujo genéricos y la posibilidad de usar restricciones que aceptan tipos cuyo tipo subyacente coincide con uno dado. Un ejemplo: func StrictDouble[T int](x T) T { return x * 2 } acepta solo el tipo exacto int, mientras que func FlexibleDouble[T ~int](x T) T { return x * 2 } acepta cualquier tipo cuyo tipo subyacente sea int, por ejemplo type MyInt int; var n MyInt = 5; FlexibleDouble(n) funciona pero StrictDouble(n) no. El tilde se conoce como constraint de aproximación y permite mayor flexibilidad con tipos definidos por el usuario.
Consejos prácticos: cuando manipules bits, confirma el tamaño y signo del tipo para evitar resultados inesperados. Con genéricos, usa ~ cuando quieras admitir tipos definidos por el usuario que compartan el mismo tipo subyacente y usa la forma sin tilde cuando necesites el tipo exacto.
En Q2BSTUDIO aplicamos buenas prácticas como estas en el desarrollo de soluciones reales. Si buscas software a medida o desarrollo de aplicaciones, contamos con experiencia en aplicaciones a medida y software a medida para empresas y proyectos de alta exigencia, descubre más sobre nuestro trabajo en desarrollo de aplicaciones a medida. También diseñamos e integramos soluciones de inteligencia artificial y agentes IA adaptados a procesos empresariales, conoce nuestras propuestas de inteligencia artificial en servicios de inteligencia artificial.
Ofrecemos además servicios en ciberseguridad, pentesting, servicios cloud aws y azure, servicios inteligencia de negocio y power bi, automatización de procesos y más para ayudar a tu empresa a ser más eficiente y segura.