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中文網其他相關文章!