快速入门:将 Azure Cosmos DB for Table 与 Azure SDK for Go 配合使用
在本快速入门中,你将使用 Azure SDK for Go 部署基本的 Azure Cosmos DB for Table 应用程序。 Azure Cosmos DB for Table 是一种无架构数据存储,允许应用程序在云中存储结构化表数据。 你将了解如何使用 Azure SDK for Go 在 Azure Cosmos DB 资源中创建表、行并执行基本任务。
库源代码 | 包 (Go) | Azure Developer CLI
先决条件
- Azure 开发人员 CLI
- Docker Desktop
Go
1.21 或更高版本
如果你没有 Azure 帐户,请在开始之前创建一个试用帐户。
初始化项目
使用 Azure Developer CLI (azd
) 创建 Azure Cosmos DB for Table 帐户并部署容器化示例应用程序。 示例应用程序使用客户端库来管理、创建、读取和查询示例数据。
在空目录中打开终端。
如果尚未经过身份验证,请使用
azd auth login
向 Azure Developer CLI 进行身份验证。 按照该工具指定的步骤,使用首选 Azure 凭据向 CLI 进行身份验证。azd auth login
使用
azd init
来初始化项目。azd init --template cosmos-db-table-go-quickstart
在初始化期间,配置唯一的环境名称。
使用
azd up
部署 Azure Cosmos DB 帐户。 Bicep 模板还部署示例 Web 应用程序。azd up
在预配过程中,选择订阅、所需位置和目标资源组。 等待预配过程完成。 此过程可能需要大约 5 分钟。
预配 Azure 资源后,输出中将包含指向正在运行的 Web 应用程序的 URL。
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io> SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
使用控制台中的 URL 在浏览器中导航到 Web 应用程序。 观察正在运行的应用的输出。
安装客户端库
客户端库可通过 Go 作为 aztables
包使用。
打开终端并导航到
/src
文件夹。cd ./src
使用
go install
安装aztables
包(如果尚未安装)。go install github.com/Azure/azure-sdk-for-go/sdk/data/aztables
打开并查看 src/go.mod 文件,以验证
github.com/Azure/azure-sdk-for-go/sdk/data/aztables
条目是否存在。
对象模型
名称 | 描述 |
---|---|
ServiceClient |
此类型是主要客户端类型,用于管理帐户范围的元数据或数据库。 |
Client |
此类型表示帐户中表的客户端。 |
代码示例
模板中的示例代码使用名为 cosmicworks-products
的表。 cosmicworks-products
表包含每个产品的详细信息,例如名称、类别、数量、价格、唯一标识符和销售标志。 容器使用唯一标识符作为行键,使用类别作为分区键。
验证客户端
此示例创建 ServiceClient
类型的新实例。
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
return err
}
client, err := aztables.NewServiceClient("<azure-cosmos-db-table-account-endpoint>", credential)
if err != nil {
log.Fatal(err)
}
获取表
此示例使用 ServiceClient
类型的 NewClient
函数创建 Client
类型的实例。
table, err := client.NewClient("<azure-cosmos-db-table-name>")
if err != nil {
log.Fatal(err)
}
创建实体
在表中创建新实体的最简单方法是创建类型为 aztables.EDMEntity
的实例。 使用 aztables.Entity
类型设置 RowKey
和 PartitionKey
属性,然后使用字符串映射设置任何额外的属性。
entity := aztables.EDMEntity{
Entity: aztables.Entity{
RowKey: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
PartitionKey: "gear-surf-surfboards",
},
Properties: map[string]any{
"Name": "Yamba Surfboard",
"Quantity": 12,
"Price": 850.00,
"Clearance": false,
},
}
使用 json.Marshal
将实体转换为字节数组,然后使用 UpsertEntity
在表中创建实体。
bytes, err := json.Marshal(entity)
if err != nil {
panic(err)
}
_, err = table.UpsertEntity(context.TODO(), bytes, nil)
if err != nil {
panic(err)
}
获取实体
可使用 GetEntity
从表中检索特定实体。 然后,可以使用 json.Unmarshal
通过 aztables.EDMEntity
类型对其进行分析。
rowKey := "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
partitionKey := "gear-surf-surfboards"
response, err := table.GetEntity(context.TODO(), partitionKey, rowKey, nil)
if err != nil {
panic(err)
}
var entity aztables.EDMEntity
err = json.Unmarshal(response.Value, &entity)
if err != nil {
panic(err)
}
查询实体
插入实体后,还可使用 NewListEntitiesPager
和字符串筛选器运行查询以获取与特定筛选器匹配的所有实体。
filter := "PartitionKey eq 'gear-surf-surfboards'"
options := &aztables.ListEntitiesOptions{
Filter: &filter,
}
pager := table.NewListEntitiesPager(options)
使用页导航的 More
函数分析查询的分页结果,以确定是否存在更多页面,然后使用 NextPage
函数获取下一页结果。
for pager.More() {
response, err := pager.NextPage(context.TODO())
if err != nil {
panic(err)
}
for _, entityBytes := range response.Entities {
var entity aztables.EDMEntity
err := json.Unmarshal(entityBytes, &entity)
if err != nil {
panic(err)
}
writeOutput(fmt.Sprintf("Found entity:\t%s\t%s", entity.Properties["Name"], entity.RowKey))
}
}
清理资源
不再需要示例应用程序或资源时,请删除相应的部署和所有资源。
azd down