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