亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何訪問golang中的錯誤個別屬性

我如何訪問golang中的錯誤個別屬性

Go
翻閱古今 2022-11-23 16:06:22
我正在使用數據同步 API 開始執行任務,沒有任何問題。我正在努力處理返回的錯誤結構,我想訪問單個元素,但我似乎無法這樣做。例如在以下錯誤中我希望能夠訪問Message_的內容2022/03/19 09:33:48 Sync called : InvalidRequestException: Unable to queue the task execution for task task-xxxxxxxxxxxx. The task already has another task execution exec-030b4a31dc2e33641 currently running or queued with identical Include and Exclude filter patterns. Please provide unique Include and Exclude filter patterns for the new task execution and try again.{  RespMetadata: {    StatusCode: 400,    RequestID: "xxxxxxxxxxxxxxxxxxxxx"  },  ErrorCode: "DedupeFailed",  Message_: "Unable to queue the task execution for task task-xxxxxxxxxx. The task already has another task execution exec-xxxxxxxxxx currently running or queued with identical Include and Exclude filter patterns. Please provide unique Include and Exclude filter patterns for the new task execution and try again."}這是我的工作示例:    // Create datasync service client    svc := datasync.New(sess)    params := &datasync.StartTaskExecutionInput{        TaskArn : aws.String("arn:aws:datasync:*******************************"),    }    // start task execution    resp, err := svc.StartTaskExecution(params)    //err = req.Send()    if err == nil { // resp is now filled        fmt.Println(resp)  // this outputs this { TaskExecutionArn: "arn:aws:datasync:xxxxxxxx:task/task-03ecb7728e984e36a/execution/exec-xxxxxxxxxx" }    } else {        fmt.Println(err)        //fmt.Println(err.Message()) THIS DOES NOT WORK        //fmt.Println(err.Message_)  THIS ALSO DOES NOT WORK    }如果我這樣做fmt.Println(err.Message())或者this fmt.Println(err.Message_)我得到這個error  err.Message undefined (type error has no field or method Message) err.Message_ undefined (type error has no field or method Message_)我哪里做錯了 ?
查看完整描述

1 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

AWS SDK for Go 中的錯誤通常是接口錯誤awserr.Error(Github 上的代碼)。


如果你只想收到消息,你可以這樣做:


resp, err := svc.StartTaskExecution(params)


if err != nil {

    if awsErr, ok := err.(awserr.Error); ok {

        fmt.Println(awsErr.Message())

    } else {

        fmt.Println(err.Error())

    }

}

首先,檢查是否確實存在錯誤:


if err != nil {...}

然后,我們嘗試將錯誤轉換為特定的“類型” awserr.Error:


err.(awserr.Error)

cast 的返回值是特定的錯誤awsErr和一個bool指示 cast 是否有效的值 ( ok)。


awsErr, ok := err.(awserr.Error)

其余代碼基本上只是檢查,如果ok == true是這種情況,您可以訪問錯誤字段,例如Message:


if awsErr, ok := err.(awserr.Error); ok {

    fmt.Println(awsErr.Message())

}

否則,您只需打印標準的 Go 錯誤消息:


if awsErr, ok := err.(awserr.Error); ok {

    ...

} else {

    fmt.Println(err.Error())

}


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號