

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Go 连接到 Neptune 数据库实例
<a name="access-graph-gremlin-go"></a>

**重要**  
选择正确的 Apache TinkerPop Gremlin 驱动程序版本对于与你的 Neptune 引擎版本兼容至关重要。使用不兼容的版本可能会导致连接失败或意外行为。有关版本兼容性的详细信息，请参阅[使用 Gremlin 访问 Neptune 图形](access-graph-gremlin.md)。

**注意**  
只要你在编写的 Gremlin 查询中只使用 3. TinkerPop 4.x 功能，gremlingo 3.5.x 版本就向后兼容 3.4.x 版本。

以下部分将指导您完成 Go 示例的运行，该示例连接到 Neptune 数据库实例并执行 Gremlin 遍历。

必须从与您的 Neptune 数据库实例位于同一虚拟私有云 (VPC) 中的 Amazon EC2 实例中按照这些说明操作。

开始之前，请执行以下操作：
+ 从 [go.dev](https://go.dev/dl/) 网站下载并安装 Go 1.17 或更高版本。

**使用 Go 连接到 Neptune**

1. 从空目录开始，初始化一个新的 Go 模块：

   ```
   go mod init example.com/gremlinExample
   ```

1. 添加 gremlin-go 作为新模块的依赖项：

   ```
   go get github.com/apache/tinkerpop/gremlin-go/v3/driver
   ```

1. 创建一个名为 `gremlinExample.go` 的文件，然后在文本编辑器中打开它。

1. 将以下内容复制到 `gremlinExample.go` 文件中，同时将 *`(your neptune endpoint)`* 替换为 Neptune 数据库实例的地址：

   ```
   package main
   
   import (
     "fmt"
     gremlingo "github.com/apache/tinkerpop/gremlin-go/v3/driver"
   )
   
   func main() {
     // Creating the connection to the server.
     driverRemoteConnection, err := gremlingo.NewDriverRemoteConnection("wss://(your neptune endpoint):8182/gremlin",
       func(settings *gremlingo.DriverRemoteConnectionSettings) {
         settings.TraversalSource = "g"
       })
     if err != nil {
       fmt.Println(err)
       return
     }
     // Cleanup
     defer driverRemoteConnection.Close()
   
     // Creating graph traversal
     g := gremlingo.Traversal_().WithRemote(driverRemoteConnection)
   
     // Perform traversal
     results, err := g.V().Limit(2).ToList()
     if err != nil {
       fmt.Println(err)
       return
     }
     // Print results
     for _, r := range results {
       fmt.Println(r.GetString())
     }
   }
   ```
**注意**  
搭载 macOS 的 Go 1.18\$1 目前不支持 Neptune TLS 证书格式，尝试启动连接时可能会出现 509 错误。对于本地测试，可以通过在导入中添加“crypto/tls”并按如下方式修改 `DriverRemoteConnection` 设置来跳过此操作：  

   ```
   // Creating the connection to the server.
   driverRemoteConnection, err := gremlingo.NewDriverRemoteConnection("wss://your-neptune-endpoint:8182/gremlin",
     func(settings *gremlingo.DriverRemoteConnectionSettings) {
         settings.TraversalSource = "g"
         settings.TlsConfig = &tls.Config{InsecureSkipVerify: true}
     })
   ```

1. 输入以下命令以运行示例：

   ```
   go run gremlinExample.go
   ```

此示例结尾处的 Gremlin 查询将返回切片中的顶点 `(g.V().Limit(2))`。然后，对该切片进行迭代并使用标准 `fmt.Println` 函数进行打印。

**注意**  
要将遍历提交到服务器进行评估，需要 Gremlin 查询的最后一部分 `ToList()`。如果您未包含该方法或其它等效方法，该查询将不会提交到 Neptune 数据库实例。

以下方法将查询提交到 Neptune 数据库实例：
+ `ToList()`
+ `ToSet()`
+ `Next()`
+ `GetResultSet()`
+ `Iterate()`

上述示例通过使用 `g.V().Limit(2).ToList()` 遍历返回图形中的前两个顶点。要查询其他内容，请将其替换为具有其中一种适当的结尾方法的其他 Gremlin 遍历。

## IAM 身份验证
<a name="access-graph-gremlin-go-iam"></a>

Neptune 支持 [IAM 身份验证](iam-auth-enable.md)来控制对数据库集群的访问。如果您启用了 IAM 身份验证，则需要使用签名版本 4 签名来验证您的请求。有关从 Go 客户端进行连接的详细说明和代码示例，请参阅[通过 Gremlin Go 使用 IAM 身份验证连接到 Amazon Neptune 数据库](gremlin-go-iam-auth.md)。