https://firemiles-blog.oss-cn-shanghai.aliyuncs.com/blog-avator.png

Golang json 序列化

前言

这两天升级 client-go 版本,涉及 grpc proto 相关代码生成。升级完成后在调试的过程中,发现当数据存入etcd时,一个boolean类型的字段消失了,仔细研究了相关代码半天,最后才发现 go 在 Marshal 结构体时,如果字段是boolean类型,并且设置了omitempty,则会在false的事后作为empty删除。为了避免以后再次栽倒同样的坑里,特意写作本篇博客详细记录golang对json的处理。

Kubernetes API 开发(四)

生成代码

除了 default-gen, deepcopy-gen, conversion-gen, 和 openapi-gen 外,还有其他的生成器:

  • go-to-protobuf
  • client-gen
  • lister-gen
  • informer-gen
  • codecgen (使用 ugorji codec快速串行化json)

大部分生成器基于 gengo ,拥有相同的命令行选项。 --verify-only 会检查磁盘上的将要生成的文件。

生成器生成代码时有个 --go-header-file 选项,该选项指定包含生成代码头部内容的文件。头部内容一般是版权信息,放在生成代码的最前面,并且会被稍后的 repo-infra/verify/verify-boilerplane.sh 脚本检查。

执行 make update 会调用一系列脚本 包括以上的生成器。请继续阅读以下段落,因为某些生成器的使用需要一些先决条件,而且执行 make update 耗时太久,下面还会介绍如何单独调用生成器。