Go の静的解析ツールの作成と活用
by
Takumasa Sakao
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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