Go の静的解析ツールの作成と活用
by
Takumasa Sakao
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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