github.com/gmemcc/yaegi@v0.12.1-0.20221128122509-aa99124c5d16/_test/type26.go (about) 1 package main 2 3 import ( 4 "errors" 5 "sync/atomic" 6 ) 7 8 type wrappedError struct { 9 wrapped error 10 } 11 12 func (e *wrappedError) Error() string { 13 return "some outer error" 14 } 15 16 func (e *wrappedError) Unwrap() error { 17 return e.wrapped 18 } 19 20 var err atomic.Value 21 22 func getWrapped() *wrappedError { 23 if v := err.Load(); v != nil { 24 err := v.(*wrappedError) 25 if err.wrapped != nil { 26 return err 27 } 28 } 29 return nil 30 } 31 32 func main() { 33 err.Store(&wrappedError{wrapped: errors.New("test")}) 34 35 e := getWrapped() 36 if e != nil { 37 println(e.Error()) 38 println(e.wrapped.Error()) 39 } 40 } 41 42 // Output: 43 // some outer error 44 // test