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 }