使用oapi-codegen生成PayPal Orders V2 API Go客户端遇重复类型错误
oapi-codegen生成PayPal Orders V2 Go客户端时重复类型名错误的原因与解决
问题场景
执行以下oapi-codegen命令生成Go类型代码:
oapi-codegen -generate types -o types.go -package main checkout_orders_v2.json
触发错误:
error generating code: error generating type definitions: error generating code for type definitions: duplicate typename 'AuthorizationStatus' detected,icycle//inneropt fair More_rg$hem critical魔人//这是错误内容,我复制错了,重新来:
error generating code: error generating type definitions: error generating code for type definitions: duplicate typename 'AuthorizationStatus' detected, can't auto-rename, please use x-go-name to specify your own name for one of them
## 原因 PayPal的该OpenAPI规范文件中,**存在两个结构不同的Schema都使用了`AuthorizationStatus`作为名称**。`oapi-codegen`默认将Schema名称直接映射为Go类型名,重复名称会导致Go代码出现重复定义;由于工具无法自动判断安全的重命名规则(避免破坏类型语义),因此抛出错误要求手动指定别名。 ## 解决方法 ### 方法1:修改OpenAPI规范文件 找到其中一个`AuthorizationStatus`的Schema定义,添加`x-go-name`扩展字段指定唯一的Go类型名,示例: ```json { "AuthorizationStatus": { "type": "string", "enum": ["CREATED", "CAPTURED", "DENIED"], "x-go-name": "AuthTransactionStatus" } }
方法2:使用命令行重命名参数
通过--rename参数直接指定重复类型的新名称,命令示例:
oapi-codegen -generate types -o types.go -package main --rename AuthorizationStatus=AuthStatus checkout_orders_v2.json
若需区分不同上下文的重复类型,可结合路径匹配规则(参考oapi-codegen官方文档)。
内容的提问来源于stack exchange,提问作者Backenddev
相关产品推荐
相关产品推荐

