跳转至

2026-06-08 学习日志

今日主题

  • Go 常量类型系统

新增认知

Go 常量类型系统

  • 常量尚未定型:Go 的字面量常量有类别但不一定有具体类型,例如 1 是无类型整数常量,"proxy" 是无类型字符串常量;这里的无类型不是没有语义,
    而是还没有绑定到 int、string、TokenType 这类具体 Go 类型。前提是它仍处在常量上下文中,尚未赋给变量或经过显式类型转换。

  • 赋值触发定型:const A TokenType = "proxy" 不需要强转,因为右侧 "proxy" 是无类型字符串常量,
    可以在编译期按左侧目标类型定型为 TokenType。若右侧已经是 var s string,则它已有具体类型 string,
    赋给 TokenType 时必须显式写 TokenType(s),Go 不做变量之间的隐式自定义类型转换。

  • 枚举边界校验:Go 没有封闭 enum,type TokenType string 加 const 只能提供命名常量,
    外部仍可构造 TokenType("other")。工程上通常接受这个事实,并在 Handler、配置解析、DB 反序列化等边界用 Valid 方法校验,
    而不是用复杂封装强行阻止构造。