

 AWS Cloud9 不再提供給新客戶。 AWS Cloud9 的現有客戶可以繼續正常使用該服務。[進一步了解](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 的 Go 教學課程 AWS Cloud9
<a name="sample-go"></a>

本教學課程可讓您在 AWS Cloud9 開發環境中執行一些 Go 程式碼。

遵循本教學課程並建立此範例可能會導致 AWS 您的帳戶產生費用。其中包括 Amazon EC2 和 Amazon S3 這類服務可能的費用。如需詳細資訊，請參閱 [Amazon EC2 定價](https://aws.amazon.com/ec2/pricing/)和 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [先決條件](#sample-go-prereqs)
+ [步驟 1：安裝必要工具](#sample-go-install)
+ [步驟 2：新增程式碼](#sample-go-code)
+ [步驟 3：執行程式碼](#sample-go-run)
+ [步驟 4：安裝和設定 適用於 Go 的 AWS SDK](#sample-go-sdk)
+ [步驟 5：新增 AWS SDK 程式碼](#sample-go-sdk-code)
+ [步驟 6：執行 AWS SDK 程式碼](#sample-go-sdk-run)
+ [步驟 7：清除](#sample-go-clean-up)

## 先決條件
<a name="sample-go-prereqs"></a>

在您使用此範例前，請務必確認您的設定符合下列要求：
+ **您必須擁有現有的 AWS Cloud9 EC2 開發環境。**本範例假設您已具備 EC2 環境，且該環境已連線到執行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2 執行個體。如果您有不同類型的環境或作業系統，您可能需要依照此範例的說明來設定相關工具。如需詳細資訊，請參閱[在 中建立環境 AWS Cloud9](create-environment.md)。
+ **您已開啟現有環境的 AWS Cloud9 IDE。**當您開啟環境時，請在 Web 瀏覽器中 AWS Cloud9 開啟該環境的 IDE。如需詳細資訊，請參閱[在 中開啟環境 AWS Cloud9](open-environment.md)。

## 步驟 1：安裝必要工具
<a name="sample-go-install"></a>

在此步驟中，您將安裝和設定 Go，這是執行此範例的必要工具。

1. 在 IDE AWS Cloud9 的終端機工作階段中，執行 **`go version`**命令以確認是否已安裝 Go。(若要啟動新終端機工作階段，請在選單列上，選擇 **Window** (視窗)、**New Terminal** (新增終端機)。如果成功，則輸出應該包含 Go 版本號碼。否則，應該會輸出錯誤訊息。若 Go 已安裝，請跳至[步驟 2：新增程式碼](#sample-go-code)。

1. 執行 **`yum update`** (適用於 Amazon Linux) 或 **`apt update`** (適用於 Ubuntu Server) 命令，協助確保已安裝最新安全性更新和錯誤修正。

   針對 Amazon Linux：

   ```
   sudo yum -y update
   ```

   針對 Ubuntu Server：

   ```
   sudo apt update
   ```

1. 若要安裝 Go，請逐一執行這些命令。

   ```
   wget https://storage.googleapis.com/golang/go1.9.3.linux-amd64.tar.gz # Download the Go installer.
   sudo tar -C /usr/local -xzf ./go1.9.3.linux-amd64.tar.gz              # Install Go.
   rm ./go1.9.3.linux-amd64.tar.gz                                       # Delete the installer.
   ```

   上述命令採用撰寫本主題時最新穩定版本的 Go。如需詳細資訊，請參閱 Go Programming Language 網站上的 [Downloads](https://golang.org/dl/)。

1. 將 Go 二進位檔的路徑新增至 `PATH` 環境變數，如下所示。

   1. 開啟您的 shell 描述檔檔案 (例如，`~/.bashrc`) 以進行編輯。

   1. 在這行程式碼的結尾，輸入下列程式碼，讓程式碼現在如下所示。

      ```
      PATH=$PATH:/usr/local/go/bin
      ```

   1. 儲存檔案。

1. 取得 `~/.bashrc` 檔案，讓終端機現在可以找到您剛剛參考的 Go 二進位檔。

   ```
   . ~/.bashrc
   ```

1. 執行 ** `go version` ** 命令，以確認現在已成功安裝和設定 Go。如果成功，輸出會包含 Go 版本號碼。

## 步驟 2：新增程式碼
<a name="sample-go-code"></a>

在 AWS Cloud9 IDE 中，建立具有此內容的檔案，並使用名稱 儲存檔案`hello.go`。(若要建立檔案，請在選單列上選擇 **File** (檔案)、**New File** (新增檔案)。若要儲存檔案，請選擇 **File** (檔案)、**Save** (儲存)。)

```
package main

import (
  "fmt"
  "os"
  "strconv"
)

func main() {
  fmt.Printf("Hello, World!\n")

  fmt.Printf("The sum of 2 and 3 is 5.\n")

  first, _ := strconv.Atoi(os.Args[1])
  second, _ := strconv.Atoi(os.Args[2])
  sum := first + second

  fmt.Printf("The sum of %s and %s is %s.",
    os.Args[1], os.Args[2], strconv.Itoa(sum))
}
```

## 步驟 3：執行程式碼
<a name="sample-go-run"></a>

1. 在 AWS Cloud9 IDE 的選單列中，選擇**執行**、**執行組態**、**新執行組態**。

1. 在 **[New] - Idle** ([新增] - 閒置) 標籤上，選擇 **Runner: Auto** (執行器: 自動)，然後選擇 **Go**。
**注意**  
如果未提供 **Go**，您可以建立 Go 的自訂執行器。  
在 **[New] - Idle** ([新增] - 閒置) 標籤上，選擇 **Runner: Auto** (執行器: 自動)，然後選擇 **New Runner** (新執行器)。
在 **My Runner.run** 標籤上，使用以下程式碼取代標籤的內容。  

      ```
      {
        "cmd" : ["go", "run", "$file", "$args"],
        "info" : "Running $project_path$file_name...",
        "selector" : "source.go"
      }
      ```
從選單列選擇 **File** (檔案)、**Save As** (另存新檔)，然後儲存檔案至 `/.c9/runners` 資料夾並命名為 `Go.run`。
在 **[New] - Idle** ([新增] - 閒置) 標籤上，選擇 **Runner: Auto** (執行器: 自動)，然後選擇 **Go**。
選擇 **hello.go** 標籤以使其作用。

1. 在 **Command (命令)** 中輸入 `hello.go 5 9`。此程式碼的 `5` 代表 `os.Args[1]`，而 `9` 代表 `os.Args[2]`。  
![\[在 IDE 中執行 Go AWS Cloud9 程式碼的輸出\]](http://docs.aws.amazon.com/zh_tw/cloud9/latest/user-guide/images/ide-go-simple.png)

1. 選擇 **Run** (執行) 按鈕，然後對照您的輸出。

   ```
   Hello, World!
   The sum of 2 and 3 is 5.
   The sum of 5 and 9 is 14.
   ```

## 步驟 4：安裝和設定 適用於 Go 的 AWS SDK
<a name="sample-go-sdk"></a>

您可以增強此範例，以使用 適用於 Go 的 AWS SDK 建立 Amazon S3 儲存貯體、列出可用的儲存貯體，然後刪除您剛建立的儲存貯體。

在此步驟中，您會安裝並設定 適用於 Go 的 AWS SDK，這可讓您透過 Go 程式碼與 Amazon S3 等 AWS 服務互動。安裝 適用於 Go 的 AWS SDK前，您必須設定 `GOPATH`環境變數。安裝 適用於 Go 的 AWS SDK 並設定 `GOPATH` 環境變數之後，您必須在環境中設定憑證管理。 適用於 Go 的 AWS SDK 需要這些登入資料才能與 AWS 服務互動。

### 設定 GOPATH 環境變數
<a name="sample-go-sdk-set-gopath"></a>

1. 開啟 `~/.bashrc` 檔案進行編輯。

1. 在檔案的最後一行後面，輸入此程式碼。

   ```
   GOPATH=~/environment/go
      
   export GOPATH
   ```

1. 儲存檔案。

1. 取得 `~/.bashrc` 檔案，讓終端機現在可以找到您剛剛參考的 `GOPATH` 環境變數。

   ```
   . ~/.bashrc
   ```

1. 執行 **`echo $GOPATH`** 命令，以確認已成功設定 `GOPATH` 環境變數。如果成功，應該會輸出 `/home/ec2-user/environment/go` 或 `/home/ubuntu/environment/go`。

### 安裝 適用於 Go 的 AWS SDK
<a name="sample-go-sdk-install-sdk"></a>

執行 **`go get`**命令，指定 適用於 Go 的 AWS SDK 來源的位置。

```
go get -u github.com/aws/aws-sdk-go/...
```

Go 會將 適用於 Go 的 AWS SDK 來源安裝到`GOPATH`環境變數指定的位置，這是您環境中的`go`資料夾。

### 在環境中設定憑證管理
<a name="sample-go-sdk-creds"></a>

每次使用 適用於 Go 的 AWS SDK 來呼叫 AWS 服務時，您必須隨呼叫提供一組登入資料。這些登入資料會判斷 是否 適用於 Go 的 AWS SDK 具有進行該呼叫的適當許可。如果登入資料未涵蓋適當許可，呼叫即會失敗。

在此步驟中，您會在環境中存放您的憑證。若要這麼做，請遵循 [AWS 服務 從 中的環境呼叫 AWS Cloud9](credentials.md) 中的指示，然後返回本主題。

如需詳細資訊，請參閱 *適用於 Go 的 AWS SDK 開發人員指南*中的[指定憑證](https://docs.aws.amazon.com/sdk-for-go/latest/developer-guide/configuring-sdk.html#specifying-credentials)。

## 步驟 5：新增 AWS SDK 程式碼
<a name="sample-go-sdk-code"></a>

在此步驟中，您會再新增其他程式碼，這次是要與 Amazon S3 互動，藉此建立儲存貯體、列出可用的儲存貯體，然後刪除您剛建立的儲存貯體。您稍後將執行此程式碼。

在 AWS Cloud9 IDE 中，建立具有此內容的檔案，並使用名稱 儲存檔案`s3.go`。

```
package main

import (
	"fmt"
	"os"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
)

func main() {

	if len(os.Args) < 3 {
		fmt.Printf("Usage: go run s3.go <the bucket name> <the AWS Region to use>\n" +
			"Example: go run s3.go my-test-bucket us-east-2\n")
		os.Exit(1)
	}

	sess := session.Must(session.NewSessionWithOptions(session.Options{
		SharedConfigState: session.SharedConfigEnable,
	}))
	svc := s3.New(sess, &aws.Config{
		Region: aws.String(os.Args[2]),
	})

	listMyBuckets(svc)
	createMyBucket(svc, os.Args[1], os.Args[2])
	listMyBuckets(svc)
	deleteMyBucket(svc, os.Args[1])
	listMyBuckets(svc)
}

// List all of your available buckets in this AWS Region.
func listMyBuckets(svc *s3.S3) {
	result, err := svc.ListBuckets(nil)

	if err != nil {
		exitErrorf("Unable to list buckets, %v", err)
	}

	fmt.Println("My buckets now are:\n")

	for _, b := range result.Buckets {
		fmt.Printf(aws.StringValue(b.Name) + "\n")
	}

	fmt.Printf("\n")
}

// Create a bucket in this AWS Region.
func createMyBucket(svc *s3.S3, bucketName string, region string) {
	fmt.Printf("\nCreating a new bucket named '" + bucketName + "'...\n\n")

	_, err := svc.CreateBucket(&s3.CreateBucketInput{
		Bucket: aws.String(bucketName),
		CreateBucketConfiguration: &s3.CreateBucketConfiguration{
			LocationConstraint: aws.String(region),
		},
	})

	if err != nil {
		exitErrorf("Unable to create bucket, %v", err)
	}

	// Wait until bucket is created before finishing
	fmt.Printf("Waiting for bucket %q to be created...\n", bucketName)

	err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{
		Bucket: aws.String(bucketName),
	})
}

// Delete the bucket you just created.
func deleteMyBucket(svc *s3.S3, bucketName string) {
	fmt.Printf("\nDeleting the bucket named '" + bucketName + "'...\n\n")

	_, err := svc.DeleteBucket(&s3.DeleteBucketInput{
		Bucket: aws.String(bucketName),
	})

	if err != nil {
		exitErrorf("Unable to delete bucket, %v", err)
	}

	// Wait until bucket is deleted before finishing
	fmt.Printf("Waiting for bucket %q to be deleted...\n", bucketName)

	err = svc.WaitUntilBucketNotExists(&s3.HeadBucketInput{
		Bucket: aws.String(bucketName),
	})
}

// If there's an error, display it.
func exitErrorf(msg string, args ...interface{}) {
	fmt.Fprintf(os.Stderr, msg+"\n", args...)
	os.Exit(1)
}
```

## 步驟 6：執行 AWS SDK 程式碼
<a name="sample-go-sdk-run"></a>

1. 在 AWS Cloud9 IDE 的選單列中，選擇**執行**、**執行組態**、**新執行組態**。

1. 在 **[New] - Idle** ([新增] - 閒置) 標籤上，選擇 **Runner: Auto** (執行器: 自動)，然後選擇 **Go**。

1. 對於**命令**，輸入 `s3.go YOUR_BUCKET_NAME THE_AWS_REGION `，其中 ` YOUR_BUCKET_NAME `是您要建立和刪除的儲存貯體名稱，而 ` THE_AWS_REGION `是您要建立儲存貯體 AWS 的區域 ID。例如，若為美國東部 (俄亥俄) 區域，則使用 `us-east-2`。其他區域的 ID 請參閱《[》章節 ](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)Amazon Simple Storage Service (Amazon S3)*Amazon Web Services 一般參考*。
**注意**  
Amazon S3 儲存貯體名稱必須是唯一的 AWS，而不只是您的帳戶 AWS 。

1. 選擇 **Run** (執行) 按鈕，然後對照您的輸出。

   ```
   My buckets now are:
   
   Creating a new bucket named 'my-test-bucket'...
   
   My buckets now are:
   
   my-test-bucket
   
   Deleting the bucket named 'my-test-bucket'...
   
   My buckets now are:
   ```

## 步驟 7：清除
<a name="sample-go-clean-up"></a>

為了避免在您完成使用此範例後持續向您的 AWS 帳戶收取費用，您應該刪除環境。如需說明，請參閱[在 中刪除環境 AWS Cloud9](delete-environment.md)。