114
going loopy adventures in iteration with google go @feyeleanor Going Loopy http://slideshare.net/feyeleanor/ 1

going loopy - adventures in iteration with google go

Embed Size (px)

Citation preview

going loopyadventures in iteration with google go

!!

@feyeleanor

Going Loopy http://slideshare.net/feyeleanor/!1

the conditional loop

Going Loopy http://slides.games-with-brains.net/!2

package mainimport "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {fmt.Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!3

package mainimport "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {fmt.Printf("%v: %v\n", i, s[i])

}}!!0: 01: 22: 43: 64: 8

Going Loopy http://slides.games-with-brains.net/!4

package mainimport "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {fmt.Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!5

package mainimport "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {fmt.Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!6

package mainimport "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {fmt.Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!7

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

!8Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

!9Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

!10Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!11

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!12

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!13

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!14

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!15

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!16

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!17

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

!18Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!19

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!20

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!21

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!22

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i := 0; i < len(s); i++ {Printf("%v: %v\n", i, s[i])

}}

Going Loopy http://slides.games-with-brains.net/!23

the infinite loop

Going Loopy http://slides.games-with-brains.net/!24

package mainimport . "fmt"!func main() {defer func() {recover()

}()s := []int{0, 2, 4, 6, 8}i := 0for {Printf("%v: %v\n", i, s[i])i++

}}

Going Loopy http://slides.games-with-brains.net/!25

package mainimport . "fmt"!func main() {defer func() {recover()

}()s := []int{0, 2, 4, 6, 8}i := 0for {Printf("%v: %v\n", i, s[i])i++

}}

Going Loopy http://slides.games-with-brains.net/!26

package mainimport . "fmt"!func main() {defer func() {recover()

}()s := []int{0, 2, 4, 6, 8}i := 0for {Printf("%v: %v\n", i, s[i])i++

}}

Going Loopy http://slides.games-with-brains.net/!27

package mainimport . "fmt"!func main() {defer func() {recover()

}()s := []int{0, 2, 4, 6, 8}i := 0for {Printf("%v: %v\n", i, s[i])i++

}}

Going Loopy http://slides.games-with-brains.net/!28

package mainimport . "fmt"!func main() {defer func() {recover()

}()s := []int{0, 2, 4, 6, 8}i := 0for {Printf("%v: %v\n", i, s[i])i++

}}

Going Loopy http://slides.games-with-brains.net/!29

package mainimport . "fmt"!func main() {defer func() {recover()

}()s := []int{0, 2, 4, 6, 8}i := 0for {Printf("%v: %v\n", i, s[i])i++

}}

Going Loopy http://slides.games-with-brains.net/!30

package mainimport . "fmt"!func main() {defer func() {recover()

}()s := []int{0, 2, 4, 6, 8}i := 0for i := 0; ; i++ {Printf("%v: %v\n", i, s[i])i++

}}

Going Loopy http://slides.games-with-brains.net/!31

the range

Going Loopy http://slides.games-with-brains.net/!32

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i, v := range s {Printf("%v: %v\n", i, v)

}}

Going Loopy http://slides.games-with-brains.net/!33

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i, v := range s {Printf("%v: %v\n", i, v)

}}

Going Loopy http://slides.games-with-brains.net/!34

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i, v := range s {Printf("%v: %v\n", i, v)

}}

Going Loopy http://slides.games-with-brains.net/!35

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i, v := range s {Printf("%v: %v\n", i, v)

}}

Going Loopy http://slides.games-with-brains.net/!36

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i, v := range s {Printf("%v: %v\n", i, v)

}}

Going Loopy http://slides.games-with-brains.net/!37

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}for i, v := range s {Printf("%v: %v\n", i, v)

}}

Going Loopy http://slides.games-with-brains.net/!38

a functional interlude

!39Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s []int) {for i, v := range s {Printf("%v: %v\n", i, v)

}}

!40Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s []int) {for i, v := range s {Printf("%v: %v\n", i, v)

}}

!41Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s []int) {for i, v := range s {Printf("%v: %v\n", i, v)

}}

!42Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s []int) {for i, v := range s {Printf("%v: %v\n", i, v)

}}

!43Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {print_slice(0, 2, 4, 6, 8)

}!func print_slice(s ...int) {for i, v := range s {Printf("%v: %v\n", i, v)

}}

!44Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {print_slice(0, 2, 4, 6, 8)

}!func print_slice(s ...int) {for i, v := range s {Printf("%v: %v\n", i, v)

}}

!45Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {print_slice(0, 2, 4, 6, 8)

}!func print_slice(s ...int) {for i, v := range s {Printf("%v: %v\n", i, v)

}}

!46Going Loopy http://slides.games-with-brains.net/

asserting type

Going Loopy http://slides.games-with-brains.net/!47

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {for i, v := range s.([]int) {Printf("%v: %v\n", i, v)

}}

Going Loopy http://slides.games-with-brains.net/!48

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {for i, v := range s.([]int) {Printf("%v: %v\n", i, v)

}}

Going Loopy http://slides.games-with-brains.net/!49

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {for i, v := range s.([]int) {Printf("%v: %v\n", i, v)

}}

Going Loopy http://slides.games-with-brains.net/!50

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {if s, ok := s.([]int); ok {for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!51

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {if s, ok := s.([]int); ok {for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!52

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {if s, ok := s.([]int); ok {for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!53

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {if s, ok := s.([]int); ok {for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!54

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {if s, ok := s.([]int); ok {for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!55

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {if s, ok := s.([]int); ok {for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!56

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {switch s := s.(type) {case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!57

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {switch s := s.(type) {case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!58

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {switch s := s.(type) {case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!59

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {switch s := s.(type) {case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!60

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {switch s := s.(type) {case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!61

package mainimport . "fmt"!func main() {print_slice([]int{0, 2, 4, 6, 8})

}!func print_slice(s interface{}) {switch s := s.(type) {case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

Going Loopy http://slides.games-with-brains.net/!62

closures

!63Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!64Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!65Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!66Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!67Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!68Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!69Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!70Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!71Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!72Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_slice(func(i int) int { return s[i] })

}!func print_slice(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}}

}

!73Going Loopy http://slides.games-with-brains.net/

channels

!74Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!75Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!76Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int, 16) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!77Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!78Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!79Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!80Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!81Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!82Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!83Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() { c := make(chan int) go func() { for _, v := range []int{0, 2, 4, 6, 8} { c <- v } close(c) }() Printf("elements: %v\n", print_channel(c))}!func print_channel(c chan int) (i int) { for v := range c { Printf("%v: %v\n", i, v) i++ } return}

!84Going Loopy http://slides.games-with-brains.net/

upon reflection

!85Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] * 2 })

}!func print_values(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

!86Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] * 2 })

}!func print_values(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

!87Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] * 2 })

}!func print_values(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

!88Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] * 2 })

}!func print_values(s interface{}) {switch s := s.(type) {case func(int) int:for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s(i))

}case []int:for i, v := range s {Printf("%v: %v\n", i, v)

}}

}

!89Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface{})

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i))

}}

}

!90Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface{})

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i))

}}

}

!91Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!92Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!93Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!94Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!95Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!96Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!97Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!98Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!99Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!100Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!101Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"import . "reflect"!func main() {s := []int{0, 2, 4, 6, 8}print_values(s)print_values(func(i int) int { return s[i] })

}!func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:p := []Value{ ValueOf(i) }for i := 0; i < 5; i++ {Printf("%v: %v\n", i, s.Call(p)[0].Interface())

}case Slice:for i := 0; i < s.Len(); i++ {Printf("%v: %v\n", i, s.Index(i).Interface())

}}

}

!102Going Loopy http://slides.games-with-brains.net/

user-defined type

!103Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!type Iterable interface {Each(func(interface{}))

}!type IterableSlice[]intfunc (i IterableSlice) Each(f func(interface{})) {for _, v := range i {f(v)

}}!func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++

})}

!104Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!type Iterable interface {Each(func(interface{}))

}!type IterableSlice[]intfunc (i IterableSlice) Each(f func(interface{})) {for _, v := range i {f(v)

}}!func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++

})}

!105Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!type Iterable interface {Each(func(interface{}))

}!type IterableSlice[]intfunc (i IterableSlice) Each(f func(interface{})) {for _, v := range i {f(v)

}}!func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++

})}

!106Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!type Iterable interface {Each(func(interface{}))

}!type IterableSlice[]intfunc (i IterableSlice) Each(f func(interface{})) {for _, v := range i {f(v)

}}!func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++

})}

!107Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!type Iterable interface {Each(func(interface{}))

}!type IterableSlice[]intfunc (i IterableSlice) Each(f func(interface{})) {for _, v := range i {f(v)

}}!func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++

})}

!108Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!type Iterable interface {Each(func(interface{}))

}!type IterableSlice[]intfunc (i IterableSlice) Each(f func(interface{})) {for _, v := range i {f(v)

}}!func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++

})}

!109Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!type Iterable interface {Each(func(interface{}))

}!type IterableSlice[]intfunc (i IterableSlice) Each(f func(interface{})) {for _, v := range i {f(v)

}}!func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++

})}

!110Going Loopy http://slides.games-with-brains.net/

package mainimport . "fmt"!type Iterable interface {Each(func(interface{}))

}!type IterableSlice[]intfunc (i IterableSlice) Each(f func(interface{})) {for _, v := range i {f(v)

}}!func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++

})}

!111Going Loopy http://slides.games-with-brains.net/

you now know go

Going Loopy 112 http://slides.games-with-brains.net/

#golang

Going Loopy 113 http://slides.games-with-brains.net/

http://golang.org/

Going Loopy 114 http://slides.games-with-brains.net/