

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menangani Kesalahan di AWS SDK untuk Go V2
<a name="handle-errors"></a>

 AWS SDK untuk Go Mengembalikan kesalahan yang memenuhi tipe `error` antarmuka Go. Anda dapat menggunakan `Error()` metode ini untuk mendapatkan string pesan kesalahan SDK yang diformat tanpa penanganan khusus. Kesalahan yang dikembalikan oleh SDK dapat mengimplementasikan `Unwrap` metode. `Unwrap`Metode ini digunakan oleh SDK untuk memberikan informasi kontekstual tambahan untuk kesalahan, sambil memberikan akses ke kesalahan atau rantai kesalahan yang mendasarinya. `Unwrap`Metode ini harus digunakan dengan [errors.as](https://golang.org/pkg/errors#As) untuk menangani rantai kesalahan membuka bungkusan. 

 Penting agar aplikasi Anda memeriksa apakah terjadi kesalahan setelah menjalankan fungsi atau metode yang dapat mengembalikan jenis `error` antarmuka. Bentuk paling dasar dari penanganan kesalahan terlihat mirip dengan contoh berikut: 

```
if err != nil {
    // Handle error
    return
}
```

## Kesalahan Pencatatan
<a name="logging-errors"></a>

 Bentuk paling sederhana dari penanganan kesalahan secara tradisional untuk mencatat atau mencetak pesan kesalahan sebelum kembali atau keluar dari aplikasi. 

```
import "log"

// ...

if err != nil {
    log.Printf("error: %s", err.Error())
    return
}
```

## Kesalahan Layanan Klien
<a name="service-client-errors"></a>

 [SDK membungkus semua kesalahan yang dikembalikan oleh klien layanan dengan bengkel. OperationError](https://pkg.go.dev/github.com/aws/smithy-go#OperationError)jenis kesalahan. `OperationError`memberikan informasi kontekstual tentang nama layanan dan operasi yang terkait dengan kesalahan yang mendasarinya. Informasi ini dapat berguna untuk aplikasi yang melakukan batch operasi ke satu atau lebih layanan, dengan mekanisme penanganan kesalahan terpusat. Aplikasi Anda dapat digunakan `errors.As` untuk mengakses `OperationError` metadata ini. 

```
import "log"
import "github.com/aws/smithy-go"

// ...

if err != nil {
    var oe *smithy.OperationError
    if errors.As(err, &oe) {
        log.Printf("failed to call service: %s, operation: %s, error: %v", oe.Service(), oe.Operation(), oe.Unwrap())
    }
    return
}
```

### Tanggapan Kesalahan API
<a name="api-error-responses"></a>

 Operasi layanan dapat mengembalikan jenis kesalahan yang dimodelkan untuk menunjukkan kesalahan tertentu. Jenis model ini dapat digunakan `errors.As` untuk membuka dan menentukan apakah kegagalan operasi disebabkan oleh kesalahan tertentu. Misalnya, Amazon S3 `CreateBucket` dapat mengembalikan [BucketAlreadyExists](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3/types#BucketAlreadyExists)kesalahan jika ember dengan nama yang sama sudah ada. 

 Misalnya, untuk memeriksa apakah kesalahan adalah `BucketAlreadyExists` kesalahan: 

```
import "log"
import "github.com/aws/aws-sdk-go-v2/service/s3/types"

// ...

if err != nil {
    var bne *types.BucketAlreadyExists
    if errors.As(err, &bne) {
        log.Println("error:", bne)
    }
    return
}
```

 Semua kesalahan respons API layanan mengimplementasikan [bengkel. APIError](https://pkg.go.dev/github.com/aws/smithy-go/#APIError)jenis antarmuka. Antarmuka ini dapat digunakan untuk menangani respons kesalahan layanan yang dimodelkan atau tidak dimodelkan. Jenis ini menyediakan akses ke kode kesalahan dan pesan yang dikembalikan oleh layanan. Selain itu, jenis ini memberikan indikasi apakah kesalahan kesalahan disebabkan oleh klien atau server jika diketahui. 

```
import "log"
import "github.com/aws/smithy-go"

// ...

if err != nil {
    var ae smithy.APIError
    if errors.As(err, &ae) {
        log.Printf("code: %s, message: %s, fault: %s", ae.ErrorCode(), ae.ErrorMessage(), ae.ErrorFault().String())
    }
    return
}
```

## Mengambil Pengidentifikasi Permintaan
<a name="retrieving-request-identifiers"></a>

 Ketika bekerja dengan AWS Support, Anda mungkin diminta untuk memberikan pengenal permintaan yang mengidentifikasi permintaan yang Anda coba untuk memecahkan masalah. Anda dapat menggunakan [http. ResponseError](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/transport/http#ResponseError)dan gunakan `ServiceRequestID()` metode untuk mengambil pengenal permintaan yang terkait dengan respons kesalahan. 

```
import "log"
import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"

// ...

if err != nil {
    var re *awshttp.ResponseError
    if errors.As(err, &re) {
        log.Printf("requestID: %s, error: %v", re.ServiceRequestID(), re.Unwrap());
    }
    return
}
```

### Pengidentifikasi Permintaan Amazon S3
<a name="s3-request-identifiers"></a>

 Permintaan Amazon S3 berisi pengenal tambahan yang dapat digunakan untuk membantu AWS Support memecahkan masalah permintaan Anda. Anda dapat menggunakan [s3. ResponseError](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#ResponseError)dan panggil `ServiceRequestID()` dan `ServiceHostID()` untuk mengambil ID permintaan dan ID host. 

```
import "log"
import "github.com/aws/aws-sdk-go-v2/service/s3"

// ...

if err != nil {
    var re s3.ResponseError
    if errors.As(err, &re) {
        log.Printf("requestID: %s, hostID: %s request failure", re.ServiceRequestID(), re.ServiceHostID());
    }
    return
}
```