Don't Use Reflect - Go 1.7 release party 2016
-
Upload
lestrrat -
Category
Technology
-
view
1.343 -
download
0
Transcript of Don't Use Reflect - Go 1.7 release party 2016
![Page 1: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/1.jpg)
Don’t Use reflect
Go 1.7 Release Party Aug 8, 2016
Daisuke Maki @lestrrat
![Page 2: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/2.jpg)
Don’t Use reflect
Go 1.7 Release Party Aug 8, 2016
Daisuke Maki @lestrrat
![Page 3: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/3.jpg)
Don’t Use reflect
Go 1.7 Release Party Aug 8, 2016
Daisuke Maki @lestrrat
![Page 4: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/4.jpg)
New Go Book!
![Page 5: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/5.jpg)
![Page 6: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/6.jpg)
無念!
![Page 7: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/7.jpg)
Reflect
![Page 8: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/8.jpg)
Dynamically Change Behavior
![Page 9: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/9.jpg)
All the cool kids are doing it
![Page 10: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/10.jpg)
… in Go?
![Page 11: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/11.jpg)
Performance
![Page 12: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/12.jpg)
From The Book
![Page 13: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/13.jpg)
![Page 14: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/14.jpg)
Line Noise
![Page 15: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/15.jpg)
@P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{ @p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&& close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print
![Page 16: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/16.jpg)
![Page 17: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/17.jpg)
Line Noise
in Go?
![Page 18: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/18.jpg)
reflect.TypeOf((*Maybe)(nil)).Elem()
![Page 19: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/19.jpg)
reflect.TypeOf((*Maybe)(nil)).Elem()WTF
![Page 20: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/20.jpg)
reflect.TypeOf((*Maybe)(nil)).Elem()
![Page 21: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/21.jpg)
reflect.TypeOf((*Maybe)(nil)).Elem()
pointer to nil “Maybe”
![Page 22: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/22.jpg)
reflect.TypeOf((*Maybe)(nil)).Elem()
![Page 23: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/23.jpg)
reflect.TypeOf((*Maybe)(nil)).Elem()
Dereference the pointer reflect.Type
![Page 24: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/24.jpg)
It’s an Interface Type!
![Page 25: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/25.jpg)
stringer = reflect. TypeOf((*Stringer)(nil)).Elem() if rv.Implements(stringer) { …}
Check If A Value Implements An Interface
![Page 26: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/26.jpg)
• reflect.Type/Value usually requires a value to create
• But if you don’t want to create a variable just to create an interface reflect.Type…
• Create a nil pointer, then dereference it!
reflect.TypeOf((*Maybe)(nil)).Elem()
![Page 27: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/27.jpg)
Why Use reflect?
![Page 28: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/28.jpg)
意訳「そこにreflectがあるから」
![Page 29: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/29.jpg)
Sometimes, you just have to
![Page 30: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/30.jpg)
Otherwise, DON’T
![Page 31: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/31.jpg)
New in Go1.7
![Page 32: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/32.jpg)
禁句
![Page 33: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/33.jpg)
「この機能、誰が嬉しいんだ?」
![Page 34: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/34.jpg)
rv := reflect.ValueOf(…) fv := rv.Field(1<<63-1) // 1.7 PANICs if fv == reflect.Value{} { // <1.6 silently returns zero value }
Bug Fix
![Page 35: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/35.jpg)
rv := reflect.ValueOf(…) fv := rv.Field(1<<63-1) // 1.7 PANICs if fv == reflect.Value{} { // <1.6 silently returns zero value }
Bug Fix
![Page 36: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/36.jpg)
rv := reflect.ValueOf(…) fv := rv.Field(1<<63-1) // 1.7 PANICs if fv == reflect.Value{} { // <1.6 silently returns zero value }
Bug Fix
![Page 37: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/37.jpg)
type Foo struct { foo int // not exported }
Bug? Fix
![Page 38: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/38.jpg)
_, ok := reflect. TypeOf(Foo{}). MethodByName(“foo”)
fmt.Printf(“ok = %t\n”)
Bug? Fix
![Page 39: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/39.jpg)
_, ok := reflect. TypeOf(Foo{}). MethodByName(“foo”)
fmt.Printf(“ok = %t\n”)
Bug? Fix
// go1.6 -> true
![Page 40: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/40.jpg)
_, ok := reflect. TypeOf(Foo{}). MethodByName(“foo”)
fmt.Printf(“ok = %t\n”)
Bug? Fix
// go1.7 -> false
![Page 41: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/41.jpg)
// struct { Foo int; Bar string } typ := reflect.StructOf([]reflect.StructField{ reflect.StructField{ Name: “Foo”, Type: reflect.Int}, reflect.StructField{ Name: “Bar”, Type: reflect.String}, })
Dynamically Declare Anonymous Structs
![Page 42: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/42.jpg)
rv := reflect.New(typ) // v.Foo = 100 fv := rv.Elem(). FieldByName(“Foo”). Set(reflect.ValueOf(100)) // &struct { Foo int; Bar string }{Foo:100, Bar:""} fmt.Printf(“%#v\n”, rv.Interface())
Dynamically Declare Anonymous Structs
![Page 43: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/43.jpg)
field := fv.FieldByName(“Foo”) field.Tag.Get(“json”) // string field.Tag.Lookup(“json”) // string, bool
Can Tell Difference Between empty tag and non-existing tag
![Page 44: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/44.jpg)
Happy hacking with Go1.7
![Page 45: Don't Use Reflect - Go 1.7 release party 2016](https://reader033.fdocuments.in/reader033/viewer/2022051300/5875858c1a28ab901c8b4a7f/html5/thumbnails/45.jpg)
…and Don’t Use reflect! :D