POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Mismo mensaje, nuevo enfoque Esencia igual, título nuevo Mismo mensaje, otra forma Idea original, título renovado Mensaje original, versión corta

Operadores a nivel de bits y genéricos en Go: ^, &^ y restricciones con ~

Publicado el 09/09/2025

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.

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio