

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Gerenciamento de erros no AWS SDK para Go V2
<a name="handle-errors"></a>

 O AWS SDK para Go retorna erros que satisfazem o tipo de interface de `error` do Go. Use o método `Error()` para obter uma string formatada da mensagem de erro do SDK sem nenhum tratamento especial. Os erros retornados pelo SDK podem implementar um método `Unwrap`. O método `Unwrap` é usado pelo SDK para fornecer informações contextuais adicionais sobre erros, ao mesmo tempo que concede acesso ao erro subjacente ou à cadeia de erros. O método `Unwrap` deve ser usado com [errors.As](https://golang.org/pkg/errors#As) para gerenciar cadeias de erros de desempacotamento. 

 É importante que a aplicação verifique se ocorreu um erro após invocar uma função ou um método que possa retornar um tipo de interface de `error`. A forma mais básica de gerenciamento de erros se parece com este exemplo: 

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

## Registro em log de erros
<a name="logging-errors"></a>

 Tradicionalmente, a forma mais simples de gerenciamento de erros é registrar em log ou imprimir a mensagem de erro antes de retornar ou sair da aplicação. 

```
import "log"

// ...

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

## Erros do cliente de serviço
<a name="service-client-errors"></a>

 O SDK encapsula todos os erros retornados pelos clientes do serviço com o tipo de erro [smithy.OperationError](https://pkg.go.dev/github.com/aws/smithy-go#OperationError). `OperationError` fornece informações contextuais sobre o nome do serviço e a operação associada a um erro subjacente. Essas informações podem ser úteis para aplicações que executam lotes de operações para um ou mais serviços, com um mecanismo centralizado de gerenciamento de erros. A aplicação pode usar `errors.As` para acessar esses metadados de `OperationError`. 

```
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
}
```

### Respostas de erro de API
<a name="api-error-responses"></a>

 As operações de serviço podem retornar tipos de erro modelados para indicar erros específicos. Esses tipos modelados podem ser usados com `errors.As` para desempacotar e determinar se a falha na operação foi causada por um erro específico. Por exemplo, `CreateBucket` do Amazon S3 poderá retornar um erro [BucketAlreadyExists](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3/types#BucketAlreadyExists) se já existir um bucket com o mesmo nome. 

 Por exemplo, para verificar se um erro foi de `BucketAlreadyExists`: 

```
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
}
```

 Todos os erros de resposta da API de serviço implementam o tipo de interface [smithy.APIError](https://pkg.go.dev/github.com/aws/smithy-go/#APIError). Essa interface pode ser usada para gerenciar respostas de erro de serviço modeladas ou não modeladas. Esse tipo concede acesso ao código de erro e à mensagem retornados pelo serviço. Além disso, esse tipo indica se o erro ocorreu devido ao cliente ou ao servidor, quando essa informação é conhecida. 

```
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
}
```

## Recuperar identificadores de solicitação
<a name="retrieving-request-identifiers"></a>

 Ao trabalhar com o AWS Support, podem pedir o identificador da solicitação que identifica a solicitação que você está tentando solucionar. Você pode usar [http.ResponseError](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/transport/http#ResponseError) e o método `ServiceRequestID()` para recuperar o identificador da solicitação associado à resposta de erro. 

```
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
}
```

### Identificadores de solicitação do Amazon S3
<a name="s3-request-identifiers"></a>

 As solicitações do Amazon S3 contêm identificadores adicionais que podem ser usados para ajudar o AWS Support a solucionar sua solicitação. Você pode usar [s3.ResponseError](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#ResponseError) e chamar `ServiceRequestID()` e `ServiceHostID()` para recuperar o ID da solicitação e o ID do 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
}
```