aws/smithy-go
GitHub: aws/smithy-go
AWS 官方的 Smithy Go 代码生成器,用于从 Smithy 模型自动生成 Go 语言客户端、服务端及类型代码。
Stars: 252 | Forks: 76
# Smithy Go
[](https://github.com/aws/smithy-go/actions/workflows/go.yml)[](https://github.com/aws/smithy-go/actions/workflows/codegen.yml)
[Smithy](https://smithy.io/) 的 Go 代码生成器以及附带的 smithy-go runtime。
smithy-go runtime 需要 Go 1.24 或更高版本。
**警告:所有接口均可能发生变更。**
## :warning: 客户端 codegen 尚不稳定
此仓库中的客户端代码生成器为 aws-sdk-go-v2 提供支持。
任意的客户端生成,尽管在技术上是可行的,但仍处于开发的早期阶段:
* 生成的客户端缺少某些最初在 SDK 侧实现的功能(例如重试)
* 可能存在 bug
* 生成的客户端公共 API 可能不稳定
如果您有兴趣使用客户端代码生成器,我们鼓励您进行试验,并通过 issue 与我们分享任何反馈。
## 插件
此仓库实现了以下 Smithy 构建插件:
| ID | GAV 前缀 | 描述 |
|----|------------|-------------|
| `go-codegen` | `software.amazon.smithy.go:smithy-go-codegen` | 实现 Smithy 模型的 Go 客户端代码生成。 |
| `go-server-codegen` | `software.amazon.smithy.go:smithy-go-codegen` | 实现 Smithy 模型的 Go 服务端代码生成。 |
| `go-shape-codegen` | `software.amazon.smithy.go:smithy-go-codegen` | 实现 Smithy 模型的 Go shape 代码生成(仅限类型)。 |
**注意:构建插件目前尚未发布到 mavenCentral。您必须将其发布到 mavenLocal 才能使构建插件对 Smithy CLI 可见。构件版本目前固定为 0.1.0。**
## `go-codegen`
### 配置
[`GoSettings`](codegen/smithy-go-codegen/src/main/java/software/amazon/smithy/go/codegen/GoSettings.java)
包含了所有从 `smithy-build.json` 启用的设置以及辅助
方法和类型。为 `go-client-codegen` 启用的最新顶层属性
列表可以在 `GoSettings::from()` 中找到。
| 设置 | 类型 | 必填 | 描述 |
|-----------------|---------|----------|-----------------------------------------------------------------------------------------------------------------------------|
| `service` | string | 是 | 用于生成客户端的服务的 Shape ID。 |
| `module` | string | 是 | `generated.json`(以及 `go.mod`,如果启用了 `generateGoMod` 的话)和 `doc.go` 中的模块名称。 |
| `generateGoMod` | boolean | | 是否生成默认的 `go.mod` 文件。默认值为 `false`。 |
| `goDirective` | string | | 模块的 [Go directive](https://go.dev/ref/mod#go-mod-file-go)。默认值为支持的最低 Go 版本。 |
### 支持的协议
客户端使用的协议由客户端 `Options` 上的 `Protocol` 字段配置。SDK 将根据应用于建模服务的协议特征配置默认值。
| 协议 | 备注 |
|----------|-------|
| [`smithy.protocols#rpcv2Cbor`](https://smithy.io/2.0/additional-specs/protocols/smithy-rpc-v2.html) | |
| [`aws.protocols#restJson1`](https://smithy.io/2.0/aws/protocols/aws-restjson1-protocol.html) | |
| [`aws.protocols#restXml`](https://smithy.io/2.0/aws/protocols/aws-restxml-protocol.html) | |
| [`aws.protocols#awsJson1_0`](https://smithy.io/2.0/aws/protocols/aws-json-1_0-protocol.html) | |
| [`aws.protocols#awsJson1_1`](https://smithy.io/2.0/aws/protocols/aws-json-1_1-protocol.html) | |
| [`aws.protocols#awsQuery`](https://smithy.io/2.0/aws/protocols/aws-query-protocol.html) | |
| [`aws.protocols#ec2Query`](https://smithy.io/2.0/aws/protocols/aws-ec2-query-protocol.html) | |
### 示例
此示例将 `go-codegen` 构建插件应用于通过 `smithy init` 创建的 Smithy 快速入门示例:
```
{
"version": "1.0",
"sources": [
"models"
],
"maven": {
"dependencies": [
"software.amazon.smithy.go:smithy-go-codegen:0.1.0"
]
},
"plugins": {
"go-codegen": {
"service": "example.weather#Weather",
"module": "github.com/example/weather",
"generateGoMod": true,
"goDirective": "1.24"
}
}
}
```
## `go-server-codegen`
此插件是一个正在开发中的功能,目前暂无文档。
## `go-shape-codegen`
此插件是一个正在开发中的功能,目前暂无文档。
## 许可证
本项目基于 Apache-2.0 许可证授权。
标签:Go, JS文件枚举, Ruby工具, Smithy, SOC Prime, 代码生成, 域名枚举, 开发工具, 接口定义语言, 日志审计, 渗透测试工具