В других статически типизированных языках, таких как Haskell, Scala или Rust, иногда для таких вещей, как идентификаторы, можно было бы обернуть их в специальные типы, чтобы помочь компилятору отлавливать ошибки (например, предотвращая передачу в другую область действия String
). ) и улучшить удобочитаемость кода путем кодирования ответственности на уровне типа.
Некоторые примеры:
newtype UserId = UserId Integer
или
case class UserId(value: Long) extends AnyVal
или
struct UserId(u64);
Все эти предложения (как правило) не требуют затрат времени выполнения и немного добавляют беспорядок для улучшения душевного спокойствия и документации времени разработки на уровне типа.
Go также имеет эту способность:
type UserId uint64
Мой вопрос не в том, возможно ли это, а в том, распространено ли это и / или считается идиоматическим или нет в Go, и почему.