Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
在本快速入门中,你将使用 Azure SDK for Go 部署基本的 Azure Cosmos DB for Table 应用程序。 Azure Cosmos DB for Table 是一种无架构数据存储,允许应用程序在云中存储结构化表数据。 你将了解如何使用 Azure SDK for Go 在 Azure Cosmos DB 资源中创建表、行并执行基本任务。
API 参考文档 | 库源代码 | 包 (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-nosql-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 作为 azcosmos
包使用。
打开终端并导航到
/src
文件夹。cd ./src
使用
go install
安装azcosmos
包(如果尚未安装)。go install github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos
另请安装
azidentity
包(如果尚未安装)。go install github.com/Azure/azure-sdk-for-go/sdk/azidentity
打开并检查 src/go.mod 文件以验证
github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos
和github.com/Azure/azure-sdk-for-go/sdk/azidentity
条目是否都存在。
名称 | 描述 |
---|---|
CosmosClient |
此类是主要客户端类,用于管理帐户范围的元数据或数据库。 |
CosmosDatabase |
此类表示帐户内的数据库。 |
CosmosContainer |
此类主要用于对容器或容器中存储的项执行读取、更新和删除操作。 |
PartitionKey |
此类表示逻辑分区键。 许多常见操作和查询都需要此类。 |
模板中的示例代码使用名为 cosmicworks
的数据库和名为 products
的容器。 products
容器包含每个产品的名称、类别、数量、唯一标识符和销售标志等详细信息。 该容器使用 /category
属性作为逻辑分区键。
此示例使用 azcosmos.NewClient
创建一个新的 CosmosClient
实例并使用 DefaultAzureCredential
实例进行身份验证。
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
return err
}
clientOptions := azcosmos.ClientOptions{
EnableContentResponseOnWrite: true,
}
client, err := azcosmos.NewClient("<azure-cosmos-db-nosql-account-endpoint>", credential, &clientOptions)
if err != nil {
return err
}
使用 client.NewDatabase
检索名为 cosmicworks
的现有数据库。
database, err := client.NewDatabase("cosmicworks")
if err != nil {
return err
}
使用 database.NewContainer
检索现有的 products
容器。
container, err := database.NewContainer("products")
if err != nil {
return err
}
使用要序列化为 JSON 的所有成员构建一个 Go 类型。 在此示例中,该类型具有唯一标识符以及用于类别、名称、数量、价格和销售的字段。
type Item struct {
Id string `json:"id"`
Category string `json:"category"`
Name string `json:"name"`
Quantity int `json:"quantity"`
Price float32 `json:"price"`
Clearance bool `json:"clearance"`
}
使用 container.UpsertItem
在容器中创建某个项。 此方法会“更新插入”该项,有效地替换该项(如果该项已存在)。
item := Item {
Id: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
Category: "gear-surf-surfboards",
Name: "Yamba Surfboard",
Quantity: 12,
Price: 850.00,
Clearance: false,
}
partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")
context := context.TODO()
bytes, err := json.Marshal(item)
if err != nil {
return err
}
response, err := container.UpsertItem(context, partitionKey, bytes, nil)
if err != nil {
return err
}
同时使用唯一标识符 (id
) 和分区键字段来执行点读取操作。 使用 container.ReadItem
以有效检索特定项。
partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")
context := context.TODO()
itemId := "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
response, err := container.ReadItem(context, partitionKey, itemId, nil)
if err != nil {
return err
}
if response.RawResponse.StatusCode == 200 {
read_item := Item{}
err := json.Unmarshal(response.Value, &read_item)
if err != nil {
return err
}
}
使用 container.NewQueryItemsPager
对容器中的多个项执行查询。 使用此参数化查询查找指定类别中的所有项:
SELECT * FROM products p WHERE p.category = @category
partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")
query := "SELECT * FROM products p WHERE p.category = @category"
queryOptions := azcosmos.QueryOptions{
QueryParameters: []azcosmos.QueryParameter{
{Name: "@category", Value: "gear-surf-surfboards"},
},
}
pager := container.NewQueryItemsPager(query, partitionKey, &queryOptions)
通过使用 pager.NextPage
循环访问每个结果页来分析查询的分页结果。 在每个循环的开头使用 pager.More
来确定是否还剩下任何结果。
items := []Item{}
for pager.More() {
response, err := pager.NextPage(context.TODO())
if err != nil {
return err
}
for _, bytes := range response.Items {
item := Item{}
err := json.Unmarshal(bytes, &item)
if err != nil {
return err
}
items = append(items, item)
}
}
不再需要示例应用程序或资源时,请删除相应的部署和所有资源。
azd down