github.com/searKing/golang/go@v1.2.74/errors/example_test.go (about)

     1  // Copyright 2021 The searKing Author. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package errors_test
     6  
     7  import (
     8  	"errors"
     9  	"fmt"
    10  
    11  	errors_ "github.com/searKing/golang/go/errors"
    12  )
    13  
    14  func ExampleMulti() {
    15  	err := errors_.Multi(nil, nil)
    16  	fmt.Println(err)
    17  	fmt.Println("-----")
    18  	err = errors_.Multi(fmt.Errorf("whoops"), nil)
    19  	fmt.Println(err)
    20  	fmt.Println("-----")
    21  	err = errors_.Multi(fmt.Errorf("whoops"), fmt.Errorf("foo"))
    22  	fmt.Println(err)
    23  	fmt.Println("-----")
    24  
    25  	// Output:
    26  	// <nil>
    27  	// -----
    28  	// whoops
    29  	// -----
    30  	// whoops|foo
    31  	// -----
    32  }
    33  
    34  func ExampleMultiErrorFormat() {
    35  	err := errors_.Multi(nil)
    36  	fmt.Printf("v: %v\n", err)
    37  	fmt.Printf("+v: %+v\n", err)
    38  	fmt.Println("-----")
    39  
    40  	err = errors_.Multi(fmt.Errorf("whoops"), nil)
    41  	fmt.Printf("v: %v\n", err)
    42  	fmt.Printf("+v: %+v\n", err)
    43  	fmt.Println("-----")
    44  
    45  	err = errors_.Multi(fmt.Errorf("whoops"), fmt.Errorf("foo"))
    46  	fmt.Printf("v: %v\n", err)
    47  	fmt.Printf("+v: %+v\n", err)
    48  	fmt.Println("-----")
    49  
    50  	// Output:
    51  	// v: <nil>
    52  	// +v: <nil>
    53  	// -----
    54  	// v: whoops
    55  	// +v: whoops
    56  	// -----
    57  	// v: whoops|foo
    58  	// +v: Multiple errors occurred:
    59  	// |	whoops
    60  	// |	foo
    61  	// -----
    62  }
    63  
    64  func ExampleMultiErrorIs() {
    65  	var asWrapErr = &wrapError{msg: "wrap"}
    66  
    67  	var errorStringErr = errors.New("errorString")
    68  	var wrapErr = &wrapError{msg: "wrap"}
    69  	err := errors_.Multi(nil, errorStringErr)
    70  	fmt.Printf("err = %+v\n", err)
    71  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
    72  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
    73  	asWrapErr = &wrapError{msg: "nil"}
    74  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
    75  	fmt.Printf("wrapErr = %v\n", error(asWrapErr))
    76  	fmt.Println("-----")
    77  
    78  	err = errors_.Multi(fmt.Errorf("whoops"), nil, errorStringErr, wrapErr)
    79  	fmt.Printf("err = %+v\n", err)
    80  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
    81  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
    82  	asWrapErr = &wrapError{}
    83  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
    84  	fmt.Printf("wrapErr = %v\n", asWrapErr)
    85  	fmt.Println("-----")
    86  
    87  	err = errors_.Multi(fmt.Errorf("whoops"), fmt.Errorf("foo"), errorStringErr, wrapErr)
    88  	fmt.Printf("err = %+v\n", err)
    89  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
    90  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
    91  	asWrapErr = &wrapError{}
    92  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
    93  	fmt.Printf("wrapErr = %v\n", asWrapErr)
    94  	fmt.Println("-----")
    95  
    96  	err = errors_.Multi(fmt.Errorf("whoops"), fmt.Errorf("foo"), fmt.Errorf("bar"), errorStringErr, wrapErr)
    97  	fmt.Printf("err = %+v\n", err)
    98  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
    99  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
   100  	asWrapErr = &wrapError{}
   101  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
   102  	fmt.Printf("wrapErr = %v\n", asWrapErr)
   103  	fmt.Println("-----")
   104  
   105  	err = errors_.Multi(err, fmt.Errorf("alice"), fmt.Errorf("bob"), wrapErr)
   106  	fmt.Printf("err = %+v\n", err)
   107  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
   108  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
   109  	asWrapErr = &wrapError{}
   110  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
   111  	fmt.Printf("wrapErr = %v\n", asWrapErr)
   112  	fmt.Println("-----")
   113  
   114  	// Output:
   115  	// err = errorString
   116  	// errors.Is(err, nil) = false
   117  	// errors.Is(err, errorStringErr) = true
   118  	// errors.As(err, &asWrapErr) = false
   119  	// wrapErr = nil
   120  	// -----
   121  	// err = Multiple errors occurred:
   122  	// |	whoops
   123  	// |	errorString
   124  	// |	wrap
   125  	// errors.Is(err, nil) = false
   126  	// errors.Is(err, errorStringErr) = true
   127  	// errors.As(err, &asWrapErr) = true
   128  	// wrapErr = wrap
   129  	// -----
   130  	// err = Multiple errors occurred:
   131  	// |	whoops
   132  	// |	foo
   133  	// |	errorString
   134  	// |	wrap
   135  	// errors.Is(err, nil) = false
   136  	// errors.Is(err, errorStringErr) = true
   137  	// errors.As(err, &asWrapErr) = true
   138  	// wrapErr = wrap
   139  	// -----
   140  	// err = Multiple errors occurred:
   141  	// |	whoops
   142  	// |	foo
   143  	// |	bar
   144  	// |	errorString
   145  	// |	wrap
   146  	// errors.Is(err, nil) = false
   147  	// errors.Is(err, errorStringErr) = true
   148  	// errors.As(err, &asWrapErr) = true
   149  	// wrapErr = wrap
   150  	// -----
   151  	// err = Multiple errors occurred:
   152  	// |	Multiple errors occurred:
   153  	// |	whoops
   154  	// |	foo
   155  	// |	bar
   156  	// |	errorString
   157  	// |	wrap
   158  	// |	alice
   159  	// |	bob
   160  	// |	wrap
   161  	// errors.Is(err, nil) = false
   162  	// errors.Is(err, errorStringErr) = true
   163  	// errors.As(err, &asWrapErr) = true
   164  	// wrapErr = wrap
   165  	// -----
   166  }
   167  
   168  func ExampleMark() {
   169  	err := errors_.Mark(nil, nil)
   170  	fmt.Println(err)
   171  	fmt.Println("-----")
   172  	err = errors_.Mark(fmt.Errorf("whoops"), nil)
   173  	fmt.Println(err)
   174  	fmt.Println("-----")
   175  	err = errors_.Mark(fmt.Errorf("whoops"), fmt.Errorf("foo"))
   176  	fmt.Println(err)
   177  	fmt.Println("-----")
   178  	err = errors_.Mark(fmt.Errorf("whoops"), fmt.Errorf("foo"), fmt.Errorf("bar"))
   179  	fmt.Println(err)
   180  	fmt.Println("-----")
   181  	err = errors_.Mark(err, fmt.Errorf("alice"), fmt.Errorf("bob"))
   182  	fmt.Println(err)
   183  	fmt.Println("-----")
   184  
   185  	// Output:
   186  	// <nil>
   187  	// -----
   188  	// whoops
   189  	// -----
   190  	// whoops
   191  	// -----
   192  	// whoops
   193  	// -----
   194  	// whoops
   195  	// -----
   196  }
   197  
   198  func ExampleMarkErrorFormat() {
   199  	err := errors_.Mark(nil)
   200  	fmt.Printf("v: %v\n", err)
   201  	fmt.Printf("+v: %+v\n", err)
   202  	fmt.Println("-----")
   203  
   204  	err = errors_.Mark(fmt.Errorf("whoops"), nil)
   205  	fmt.Printf("v: %v\n", err)
   206  	fmt.Printf("+v: %+v\n", err)
   207  	fmt.Println("-----")
   208  
   209  	err = errors_.Mark(fmt.Errorf("whoops"), fmt.Errorf("foo"))
   210  	fmt.Printf("v: %v\n", err)
   211  	fmt.Printf("+v: %+v\n", err)
   212  	fmt.Println("-----")
   213  
   214  	err = errors_.Mark(fmt.Errorf("whoops"), fmt.Errorf("foo"), fmt.Errorf("bar"))
   215  	fmt.Printf("v: %v\n", err)
   216  	fmt.Printf("+v: %+v\n", err)
   217  	fmt.Println("-----")
   218  
   219  	err = errors_.Mark(err, fmt.Errorf("alice"), fmt.Errorf("bob"))
   220  	fmt.Printf("v: %v\n", err)
   221  	fmt.Printf("+v: %+v\n", err)
   222  	fmt.Println("-----")
   223  
   224  	// Output:
   225  	// v: <nil>
   226  	// +v: <nil>
   227  	// -----
   228  	// v: whoops
   229  	// +v: whoops
   230  	// -----
   231  	// v: whoops
   232  	// +v: Marked errors occurred:
   233  	// |	whoops
   234  	// M	foo
   235  	// -----
   236  	// v: whoops
   237  	// +v: Marked errors occurred:
   238  	// |	whoops
   239  	// M	foo
   240  	// M	bar
   241  	// -----
   242  	// v: whoops
   243  	// +v: Marked errors occurred:
   244  	// |	Marked errors occurred:
   245  	// |	whoops
   246  	// M	foo
   247  	// M	bar
   248  	// M	alice
   249  	// M	bob
   250  	// -----
   251  }
   252  
   253  func ExampleMarkErrorIs() {
   254  	var asWrapErr = &wrapError{msg: "wrap"}
   255  
   256  	var errorStringErr = errors.New("errorString")
   257  	var wrapErr = &wrapError{msg: "wrap"}
   258  	err := errors_.Mark(nil, errorStringErr)
   259  	fmt.Printf("err = %+v\n", err)
   260  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
   261  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
   262  	asWrapErr = &wrapError{msg: "nil"}
   263  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
   264  	fmt.Printf("wrapErr = %v\n", error(asWrapErr))
   265  	fmt.Println("-----")
   266  
   267  	err = errors_.Mark(fmt.Errorf("whoops"), nil, errorStringErr, wrapErr)
   268  	fmt.Printf("err = %+v\n", err)
   269  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
   270  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
   271  	asWrapErr = &wrapError{}
   272  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
   273  	fmt.Printf("wrapErr = %v\n", asWrapErr)
   274  	fmt.Println("-----")
   275  
   276  	err = errors_.Mark(fmt.Errorf("whoops"), fmt.Errorf("foo"), errorStringErr, wrapErr)
   277  	fmt.Printf("err = %+v\n", err)
   278  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
   279  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
   280  	asWrapErr = &wrapError{}
   281  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
   282  	fmt.Printf("wrapErr = %v\n", asWrapErr)
   283  	fmt.Println("-----")
   284  
   285  	err = errors_.Mark(fmt.Errorf("whoops"), fmt.Errorf("foo"), fmt.Errorf("bar"), errorStringErr, wrapErr)
   286  	fmt.Printf("err = %+v\n", err)
   287  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
   288  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
   289  	asWrapErr = &wrapError{}
   290  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
   291  	fmt.Printf("wrapErr = %v\n", asWrapErr)
   292  	fmt.Println("-----")
   293  
   294  	err = errors_.Mark(err, fmt.Errorf("alice"), fmt.Errorf("bob"), wrapErr)
   295  	fmt.Printf("err = %+v\n", err)
   296  	fmt.Printf("errors.Is(err, nil) = %v\n", errors.Is(err, nil))
   297  	fmt.Printf("errors.Is(err, errorStringErr) = %v\n", errors.Is(err, errorStringErr))
   298  	asWrapErr = &wrapError{}
   299  	fmt.Printf("errors.As(err, &asWrapErr) = %v\n", errors.As(err, &asWrapErr))
   300  	fmt.Printf("wrapErr = %v\n", asWrapErr)
   301  	fmt.Println("-----")
   302  
   303  	// Output:
   304  	// err = <nil>
   305  	// errors.Is(err, nil) = true
   306  	// errors.Is(err, errorStringErr) = false
   307  	// errors.As(err, &asWrapErr) = false
   308  	// wrapErr = nil
   309  	// -----
   310  	// err = Marked errors occurred:
   311  	// |	whoops
   312  	// M	errorString
   313  	// M	wrap
   314  	// errors.Is(err, nil) = false
   315  	// errors.Is(err, errorStringErr) = true
   316  	// errors.As(err, &asWrapErr) = true
   317  	// wrapErr = wrap
   318  	// -----
   319  	// err = Marked errors occurred:
   320  	// |	whoops
   321  	// M	foo
   322  	// M	errorString
   323  	// M	wrap
   324  	// errors.Is(err, nil) = false
   325  	// errors.Is(err, errorStringErr) = true
   326  	// errors.As(err, &asWrapErr) = true
   327  	// wrapErr = wrap
   328  	// -----
   329  	// err = Marked errors occurred:
   330  	// |	whoops
   331  	// M	foo
   332  	// M	bar
   333  	// M	errorString
   334  	// M	wrap
   335  	// errors.Is(err, nil) = false
   336  	// errors.Is(err, errorStringErr) = true
   337  	// errors.As(err, &asWrapErr) = true
   338  	// wrapErr = wrap
   339  	// -----
   340  	// err = Marked errors occurred:
   341  	// |	Marked errors occurred:
   342  	// |	whoops
   343  	// M	foo
   344  	// M	bar
   345  	// M	errorString
   346  	// M	wrap
   347  	// M	alice
   348  	// M	bob
   349  	// M	wrap
   350  	// errors.Is(err, nil) = false
   351  	// errors.Is(err, errorStringErr) = true
   352  	// errors.As(err, &asWrapErr) = true
   353  	// wrapErr = wrap
   354  	// -----
   355  }
   356  
   357  type wrapError struct {
   358  	msg string
   359  }
   360  
   361  func (e *wrapError) Error() string {
   362  	return e.msg
   363  }