你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本快速入门中,你将使用 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 Developer CLI
- Docker Desktop
-
Go1.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使用
aztables安装go install包(如果尚未安装)。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
导入库文件
将 github.com/Azure/azure-sdk-for-go/sdk/azidentity 和 github.com/Azure/azure-sdk-for-go/sdk/data/aztables 包导入应用程序代码。
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"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)
}
获取表
此示例使用 Client 类型的 NewClient 函数创建 ServiceClient 类型的实例。
table, err := client.NewClient("<azure-cosmos-db-table-name>")
if err != nil {
log.Fatal(err)
}
创建实体
在表中创建新实体的最简单方法是创建类型为 aztables.EDMEntity 的实例。 使用 RowKey 类型设置 PartitionKey 和 aztables.Entity 属性,然后使用字符串映射设置任何额外的属性。
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 和字符串筛选器运行查询以获取与特定筛选器匹配的所有实体。
category := "gear-surf-surfboards"
// Ensure the value is OData-compliant by escaping single quotes
safeCategory := strings.ReplaceAll(category, "'", "''")
filter := fmt.Sprintf("PartitionKey eq '%s'", safeCategory)
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