Nombres en Go: Guía para un Código Claro

Fuentes: Go Naming Conventions: A Practical Guide - Alex Edwards

Este artículo de Alex Edwards, extraído de su libro sobre desarrollo web en Go, aborda las convenciones de nomenclatura en el lenguaje Go. Una buena nomenclatura es crucial para la legibilidad, mantenibilidad y predictibilidad del código. Aunque Go permite nombres técnicamente válidos (usando unicode, dígitos y guiones bajos, sin comenzar con un dígito y sin usar palabras clave reservadas), existen convenciones y mejores prácticas a seguir.

Go distingue entre identificadores exportados (comienzan con mayúscula) y no exportados (comienzan con minúscula). Los identificadores no exportados deben usar camelCase, mientras que los exportados usan PascalCase. Es importante evitar nombres que choquen con tipos built-in de Go (como int, bool, any) o funciones built-in (como min, max, len). Evita incluir el tipo en el nombre del identificador (ej: fullNameString) a menos que sea necesario para conversiones de tipo. También se recomienda evitar nombres que choquen con nombres de paquetes de la librería estándar, aunque esto es más flexible. Se aconseja usar ASCII en los identificadores para mayor legibilidad y evitar caracteres no-ASCII.

Estas convenciones son aplicables a cualquier proyecto Go, desde pequeñas herramientas de línea de comandos hasta aplicaciones web complejas. Son especialmente importantes en proyectos colaborativos donde la consistencia en la nomenclatura facilita la comprensión del código por parte de otros desarrolladores.

La aplicación estricta de estas convenciones puede parecer restrictiva al principio, pero se vuelve natural con la práctica. La clave es priorizar la claridad y la consistencia. La elección de nombres descriptivos es más importante cuanto mayor sea el alcance del identificador. La práctica de escribir código 'tímido' (shy code), donde solo se exportan los identificadores necesarios, promueve la modularidad y facilita la refactorización. Finalmente, el paquete main debe usar identificadores no exportados por defecto, excepto en casos donde se requiera la visibilidad de campos de estructuras para la serialización o reflexión.