> Because both are of type `*errors.errorString`, so the types match and it 
copies over the value.
Arguably, `errors.errorString` should implement `As()` and return `false`, 
unless the pointers match. I suggest filing an issue.

Will do. It could also be a vet check to highlight errors.As used on 
sentinel errors which is most likely wrong as I demonstrated.

On Monday, August 2, 2021 at 10:09:48 AM UTC+2 axel.wa...@googlemail.com 
wrote:

> On Mon, Aug 2, 2021 at 10:02 AM cpu...@gmail.com <cpu...@gmail.com> wrote:
>
>> Consider this example: https://play.golang.org/p/16cU0kc8Lku, basically
>>
>> var Err = errors.New("sentinel")
>> err := errors.New("foo")
>> if errors.As(err, &Err) {
>>   fmt.Println("why?")
>> }
>>
>> I'm wondering why this matches the sentinel error
>>
>
> Because both are of type `*errors.errorString`, so the types match and it 
> copies over the value.
> Arguably, `errors.errorString` should implement `As()` and return `false`, 
> unless the pointers match. I suggest filing an issue.
>  
>
>> or rather how to properly use sentinel errors.
>>
>
> Use `errors.Is`, instead of `errors.As`.
>  
>
>> However, if thats the case, how should I construct a sentinel error that 
>> would be usable with errors.As? I don't want to rely on errors.Is as errors 
>> could be wrapped.
>>
>
> And? They can be wrapped for `As` as well. `errors.As` is only useful if 
> you want to get additional information out of the error (e.g. it's useful 
> for use with `os.PathError`). By definition, it's pointless to use it with 
> a sentinel error.
>  
>
>> So to "break" the assignability- would that mean that I'd need to define 
>> sentinel errors as e.g. struct types?
>>
>> Seem's I'm still lacking the level of understanding for go errors that 
>> I'd aspire to :/
>>
>> Cheers,
>> Andi
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/4d8969b4-dd5a-4834-893b-3e01174570bfn%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/4d8969b4-dd5a-4834-893b-3e01174570bfn%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/730c78dd-cd24-4377-b154-c1e238a2c929n%40googlegroups.com.

Reply via email to