You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于.json和.gotmpl文件生成go-freeipa的generated.go文件?

解决go-freeipa适配FreeIPA 4.10的代码生成问题

你遇到的json: cannot unmarshal string into Go struct field CertRequestResult.result.value of type int错误,确实是因为go-freeipa默认基于FreeIPA 4.9(API 2.170)生成的代码中,证书请求返回的value字段类型为int,而FreeIPA 4.10返回的是字符串类型的证书ID。下面是正确生成适配FreeIPA 4.10代码的步骤:

前置准备

  • 已克隆go-freeipa仓库到本地
  • 安装Go 1.16及以上版本
  • 拥有FreeIPA 4.10实例的访问权限(用于获取最新API schema)

代码生成步骤

这个仓库的gen是自定义的代码生成工具,和clipperhouse/gen、go generate默认逻辑无关,按以下步骤操作:

  1. 补全仓库依赖
    进入go-freeipa仓库根目录,执行:

    go mod tidy
    

    这会拉取所有第三方依赖,同时让gen工具能正确引用仓库内定义的Schema、Command等核心类型(之前直接运行go run main.go报错就是因为这些类型未被正确引用)

  2. 获取FreeIPA 4.10的API Schema
    从运行的FreeIPA 4.10实例获取最新的schema JSON文件:

    # 替换为你的FreeIPA服务器地址、管理员账号密码
    curl -k -u admin:your-password https://your-freeipa-server/ipa/schema > gen/schema.json
    

    如果没有可用实例,也可以从FreeIPA官方源码仓库的对应版本分支中下载schema文件,替换gen目录下的原schema.json

  3. 运行自定义gen工具生成代码
    在仓库根目录执行以下命令,工具会读取gen目录下的schema.json和模板文件,生成freeipa/generated.go:

    go run gen/main.go
    

验证与适配

  • 打开生成的freeipa/generated.go,搜索CertRequestResult结构体,确认value字段类型已改为string
  • 在freeipa-issuer项目中,将go-freeipa依赖替换为你本地修改后的版本:
    在freeipa-issuer的go.mod文件中添加:
    replace github.com/StefanAbl/go-freeipa => /path/to/your/local/go-freeipa
    
    然后执行go mod tidy,重新编译部署即可解决反序列化错误

内容的提问来源于stack exchange,提问作者Anghille

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 07:13:28