代码之家  ›  专栏  ›  技术社区  ›  Mandroid

go:字段定义,包含名称、类型以外的部分

go
  •  0
  • Mandroid  · 技术社区  · 1 年前

    我看到这样的结构定义:

    type Resource struct {
        Attrs []Attribute `parquet:",list"`
        ServiceName      string  `parquet:",snappy,dict"`
        Cluster          *string `parquet:",snappy,optional,dict"`
        ....
    }
    

    我理解字段定义的前两部分(名称、类型)。但最后一部分是什么意思?喜欢

    parquet:",snappy,dict"

    1 回复  |  直到 1 年前
        1
  •  2
  •   mpx    1 年前

    后引号中的文字描述Go 结构标记 可以通过反射访问(请参阅 reflect.StructTag 详细信息)。

    这些标记通常由将封送/取消封送为不同格式的代码使用,通常描述字段应如何解码或编码。的结构标记的使用 encoding/json 对于 Marshal Unmarshal 功能。

    您的示例似乎与 github.com/segmentio/parquet-go 包裹它有一些简短的 documentation on how the package interprets struct tags

    特别是:

    • snappy 使用Snappy压缩对列进行编码
    • dict 使用启用Dict编码 Parquet file
    • optional 表示“镶木地板”列是可选的。
    • list 指示应使用镶木地板LIST逻辑类型。