

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Gestión de errores en AWS SDK para Go V2
<a name="handle-errors"></a>

 AWS SDK para Go devuelve errores que cumplen con el tipo de interfaz `error` de Go. Puede usar el método `Error()` para obtener una cadena con formato del mensaje de error del SDK sin ningún tratamiento especial. Los errores que devuelve el SDK pueden implementar un método `Unwrap`. El SDK utiliza el método `Unwrap` para proporcionar información contextual adicional sobre los errores y, al mismo tiempo, proporcionar acceso al error o la cadena de errores subyacentes. El método `Unwrap` debe usarse con [Errors.as](https://golang.org/pkg/errors#As) para gestionar la desencapsulación de las cadenas de error. 

 Es importante que la aplicación compruebe si se ha producido un error después de invocar una función o un método que pueda devolver un tipo de interfaz `error`. La forma más básica de gestión de errores es similar al ejemplo siguiente: 

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

## Registro de errores
<a name="logging-errors"></a>

 Tradicionalmente, la forma más sencilla de gestionar errores consiste en registrar o imprimir el mensaje de error antes de volver a la aplicación o salir de ella. 

```
import "log"

// ...

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

## Errores del cliente de servicio
<a name="service-client-errors"></a>

 El SDK encapsula todos los errores devueltos por clientes de servicio con el tipo de error [smithy.OperationError](https://pkg.go.dev/github.com/aws/smithy-go#OperationError). `OperationError` proporciona información contextual sobre el nombre del servicio y la operación asociada a un error subyacente. Esta información puede resultar útil para las aplicaciones que realizan lotes de operaciones en uno o varios servicios, con un mecanismo de gestión de errores centralizado. Su aplicación puede utilizar `errors.As` para acceder a estos metadatos `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
}
```

### Respuestas de error de la API
<a name="api-error-responses"></a>

 Las operaciones de servicio pueden devolver tipos de errores modelados para indicar errores específicos. Estos tipos modelados se pueden utilizar con `errors.As` para desencapsular y determinar si el fallo de la operación se ha debido a un error específico. Por ejemplo, el uso de `CreateBucket` de Amazon S3 puede devolver un error [BucketAlreadyExists](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3/types#BucketAlreadyExists) si existe un bucket con el mismo nombre. 

 Por ejemplo, para comprobar si un error fue del tipo `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 los errores de respuesta de la API de servicio implementan el tipo de interfaz [smithy.APIError](https://pkg.go.dev/github.com/aws/smithy-go/#APIError). Esta interfaz se puede utilizar para gestionar tanto las respuestas de error de servicio modeladas como las no modeladas. Este tipo proporciona acceso al código y al mensaje de error que devuelve el servicio. Además, este tipo indica si el error fue responsabilidad del cliente o del servidor, en caso de conocerse. 

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

## Recuperación de identificadores de solicitud
<a name="retrieving-request-identifiers"></a>

 Al trabajar con AWS Support, es posible que se le pida que proporcione el identificador de la solicitud cuyos errores intenta solucionar. Puede usar [http.ResponseError](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/transport/http#ResponseError) y el método `ServiceRequestID()` para recuperar el identificador de solicitud asociado a la respuesta de error. 

```
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 solicitud de Amazon S3
<a name="s3-request-identifiers"></a>

 Las solicitudes de Amazon S3 contienen identificadores adicionales que se pueden utilizar para ayudar a AWS Support a solucionar los errores de su solicitud. Puede usar [s3.ResponseError](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#ResponseError) y llamar a `ServiceRequestID()` y `ServiceHostID()` para recuperar el ID de solicitud y el de 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
}
```