首頁  >  文章  >  後端開發  >  為什麼我僅在測試中收到“errors.As should not be *error”建置錯誤的第二個參數?

為什麼我僅在測試中收到“errors.As should not be *error”建置錯誤的第二個參數?

WBOY
WBOY轉載
2024-02-08 22:06:20723瀏覽

为什么我仅在测试中收到“errors.As should not be *error”构建错误的第二个参数?

php小編子墨,你好!關於你提到的建置錯誤中的問題,出現「errors.As should not be error」錯誤的原因可能有幾種。首先,這個錯誤通常表示在建置時使用了錯誤的第二個參數。你需要確保第二個參數是正確的,並且與所需的類型相符。其次,可能是你在測驗中使用了錯誤的數據。請仔細檢查測試數據,並確保它們符合預期的格式和要求。最後,這個錯誤也可能是由於框架或函式庫的問題所引起的。在這種情況下,建議查閱相關文件或尋求社群的協助,以找到解決方案。希望這些提示能對你有幫助!

問題內容

考慮以下測試:

import (
    "errors"
    "fmt"
    "testing"
)

func testerror(t *testing.t) {
    err := &myerror{}
    var target error
    fmt.println(errors.as(err, &target))
}

type myerror struct{}

func (err *myerror) error() string {
    return "oops!"
}

執行此測試會將建置錯誤 second 參數傳回錯誤。不應為 *error

去遊樂場

但是,當在 main 中執行完全相同的程式碼時,程式執行沒有問題:

package main

import (
    "errors"
    "fmt"
)

func main() {
    err := &myerror{}
    var target error
    fmt.println(errors.as(err, &target))
}

type myerror struct{}

func (err *myerror) error() string {
    return "oops!"
}

去遊樂場

我在 go playground 和我的本機開發環境中看到了這種行為,這兩個環境都使用 go 1.20。

這是 go 中的錯誤嗎?

編輯

我可以透過建立 error 類型來解決測試中的建置失敗問題:

package main

import (
    "errors"
    "fmt"
    "testing"
)

type Error error // <===== Add error type

func TestError(t *testing.T) {
    err := &MyError{}
    var target Error // <===== Use Error type
    fmt.Println(errors.As(err, &target))
}

type MyError struct{}

func (err *MyError) Error() string {
    return "oops!"
}

解決方法

該錯誤是由 go vet 指令報告的。 go test 指令自動執行 go vet 以報告重大問題。 go build 指令不執行 go vet 指令。

該警告不是 Go 中的錯誤。

使用 *error 作為第二個參數呼叫 errors.As 是沒有意義的,因為您已經知道第一個參數滿足 error 介面。幾乎可以肯定你做錯了什麼。

以上是為什麼我僅在測試中收到“errors.As should not be *error”建置錯誤的第二個參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除