Slide 1

Slide 1 text

Go    Akatsuki Geek Live @sachaos

Slide 2

Slide 2 text

>/=& • @sachaos ( @) – Twitter, GitHub    – *B8 #%  -  • 2.: 61'< – 4) 3 0; – 3?+:C9 – Go, GCP – % %"$!7 • 5A>(% %,

Slide 3

Slide 3 text

Go 1.13   error     

Slide 4

Slide 4 text



Slide 5

Slide 5 text

Go 1.13 

Slide 6

Slide 6 text

Go 1.13 

Slide 7

Slide 7 text

" !$  github.com/pkg/errors #  !  &'!%  :smile:

Slide 8

Slide 8 text



Slide 9

Slide 9 text

  ==     Wrap 

Slide 10

Slide 10 text

==    • ==    xerrors.Is  

Slide 11

Slide 11 text

 Wrap  • Wrap  

Slide 12

Slide 12 text

   Wrap  • Wrap     

Slide 13

Slide 13 text

#* •  ) – => ' '&%'   • ("$ ! " )

Slide 14

Slide 14 text

($'" )   '"!# %  & &  '"&  Wikipedia

Slide 15

Slide 15 text

Go 714,  • 714,  parse  AST %)$52 / *'3 • Go +08 • Go  '3 6#!"&( 8 – AST %) go/ast – $.- go/types – SSA golang.org/x/tools/go/ssa –  golang.org/x/tools/go/analysis –

Slide 16

Slide 16 text

github.com/sachaos/xerrchk ==  !   Wrap   

Slide 17

Slide 17 text

==   1. AST   (go/ast) 2.  error interface    (go/types)

Slide 18

Slide 18 text

1.   2. error  

Slide 19

Slide 19 text



Slide 20

Slide 20 text

0" Wrap '. • /) error #! *(return)1 Wrap (xerrors.Errorf(“wrap: %w”, err))    3- • ,+&2 – <= Wrap   Wrap    error interface  $ %(  

Slide 21

Slide 21 text

return   Wrap   • MayFail1() err   • MayFail2() err Wrap    • MayFail3 error Wrap   • return Wrap  MayFail3 err  Wrap    MayFail2 err 

Slide 22

Slide 22 text

SSA  • Static Single Assignment  •      •  golang.org/x/tools/go/ssa  

Slide 23

Slide 23 text

return  Wrap  • return  t3  t2, t5  (φ) • t2 MayFail2  Wrap    NG • t5 t4  Wrap   OK

Slide 24

Slide 24 text

SSA  • AST      "! # 

Slide 25

Slide 25 text

 • Go 1.13  error $%&#')*("-,  8 • xerrors "0/. 7362"  • 7362   Go 4+  • ! Qiita 1 4  "5  – https://qiita.com/sachaos/items/f6b3e66931d7f73dd68d

Slide 26

Slide 26 text