Go просто не хватает концепции. Нет способа пометить функцию как чистую (ее возвращаемое значение зависит только от ее аргументов, и она не изменяет какого-либо изменяемого состояния или не выполняет ввод / вывод), для компилятора нет способа сделать вывод чистоты, и нет никакой попытки оценить какое-либо выражение, содержащее вызов функции во время компиляции (потому что выполнение этого для чего-либо, кроме чистой функции с постоянными аргументами, будет источником странного поведения и ошибок, и потому что добавление необходимого механизма чтобы заставить его работать правильно, пришлось бы немножко усложнить).
Да, это существенная потеря, которая вызывает компромисс между кодом с плохим поведением во время выполнения и кодом, который выглядит ужасно. Иди партизаны выберут уродливый код и скажут, что ты плохой человек, потому что не находишь его красивым.
Лучшее, что у вас есть, - это генерация кода. Интеграция go generate
в набор инструментов и предоставление полного синтаксического анализатора Go в стандартной библиотеке позволяет относительно легко разбирать код во время сборки, и одна из возможностей, которую вы можете сделать с помощью этой возможности, - создать более продвинутые константы - складной, если вы того пожелаете. Вы по-прежнему получаете всю опасность отладки генерации кода, но это что-то.