我正在 Go 中制作一个 json 解组错误处理函数:
import "github.com/pkg/errors"
func parseJSONError(err error) {
var uterr json.UnmarshalTypeError
if errors.As(err, &uterr) {
//...
return
}
var serr json.SyntaxError
if errors.As(err, &serr) {
//...
return
}
}
Run Code Online (Sandbox Code Playgroud)
但有一种恐慌errors.As():panic: errors: *target must be interface or implement error。
我们可以从github.com/pkg/errors 文档中了解 target 是什么:
func As(err error, target interface{}) bool
问题在于两者json.UnmarshalTypeError实际上json.SyntaxError都实现了该error接口。我们可以从encoding/json文档中了解到。所以我不知道我做错了什么。即使显式转换uterrand serrto 也interface{}不能挽救这种情况。
恐慌发生在标准包github.com/pkg/errors和标准errors包中。
例如,像容器之类的容器std::vector<T*>销毁了所有由其添加的元素push_back(new T)。不会std::pair<T1*, T2*>做同样的,当你初始化它像{ new T1, new T }?
我有这个问题,因为这std::pair是一种与类容器不同的结构(它仍然没有任何意义)。我找不到有关它的任何信息。
编辑:尽管我认为容器是delete它们动态分配的元素,但这是错误的。