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