going loopy: adventures in iteration with go
TRANSCRIPT
going loopyadventures in iteration with go
Going Loopy slideshare.net/feyeleanor
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 slideshare.net/feyeleanor3
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 slideshare.net/feyeleanor4
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 slideshare.net/feyeleanor5
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 slideshare.net/feyeleanor6
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])
}}
7Going Loopy slideshare.net/feyeleanor
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 slideshare.net/feyeleanor
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 slideshare.net/feyeleanor
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 slideshare.net/feyeleanor10
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 slideshare.net/feyeleanor11
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 slideshare.net/feyeleanor12
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 slideshare.net/feyeleanor13
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 slideshare.net/feyeleanor14
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 slideshare.net/feyeleanor15
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])
}}
16Going Loopy slideshare.net/feyeleanor
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 slideshare.net/feyeleanor17
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 slideshare.net/feyeleanor18
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 slideshare.net/feyeleanor19
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 slideshare.net/feyeleanor20
package mainimport . "fmt"
func main() {defer func() {recover()
}()s := []int{0, 2, 4, 6, 8}var i intfor {Printf("%v: %v\n", i, s[i])i++
}}
Going Loopy slideshare.net/feyeleanor22
package mainimport . "fmt"
func main() {defer func() {recover()
}()s := []int{0, 2, 4, 6, 8}var i intfor {Printf("%v: %v\n", i, s[i])i++
}}
Going Loopy slideshare.net/feyeleanor23
package mainimport . "fmt"
func main() {defer func() {recover()
}()s := []int{0, 2, 4, 6, 8}var i intfor {Printf("%v: %v\n", i, s[i])i++
}}
Going Loopy slideshare.net/feyeleanor24
package mainimport . "fmt"
func main() {defer func() {recover()
}()s := []int{0, 2, 4, 6, 8}var i intfor {Printf("%v: %v\n", i, s[i])i++
}}
Going Loopy slideshare.net/feyeleanor25
package mainimport . "fmt"
func main() {defer func() {recover()
}()s := []int{0, 2, 4, 6, 8}var i intfor {Printf("%v: %v\n", i, s[i])i++
}}
Going Loopy slideshare.net/feyeleanor26
package mainimport . "fmt"
func main() {defer func() {recover()
}()s := []int{0, 2, 4, 6, 8}var i intfor {Printf("%v: %v\n", i, s[i])i++
}}
Going Loopy slideshare.net/feyeleanor27
package mainimport . "fmt"
func main() {defer func() {recover()
}()s := []int{0, 2, 4, 6, 8}for i := 0; ; i++ {Printf("%v: %v\n", i, s[i])
}}
Going Loopy slideshare.net/feyeleanor28
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 slideshare.net/feyeleanor30
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 slideshare.net/feyeleanor31
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 slideshare.net/feyeleanor32
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 slideshare.net/feyeleanor33
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 slideshare.net/feyeleanor34
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)
}}
36Going Loopy slideshare.net/feyeleanor
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)
}}
37Going Loopy slideshare.net/feyeleanor
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)
}}
38Going Loopy slideshare.net/feyeleanor
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)
}}
39Going Loopy slideshare.net/feyeleanor
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)
}}
40Going Loopy slideshare.net/feyeleanor
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)
}}
41Going Loopy slideshare.net/feyeleanor
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 slideshare.net/feyeleanor43
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 slideshare.net/feyeleanor44
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 slideshare.net/feyeleanor45
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 slideshare.net/feyeleanor46
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 slideshare.net/feyeleanor47
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 slideshare.net/feyeleanor48
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 slideshare.net/feyeleanor49
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 slideshare.net/feyeleanor50
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 slideshare.net/feyeleanor51
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 slideshare.net/feyeleanor52
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 slideshare.net/feyeleanor53
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))
}}
}
55Going Loopy slideshare.net/feyeleanor
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))
}}
}
56Going Loopy slideshare.net/feyeleanor
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))
}}
}
57Going Loopy slideshare.net/feyeleanor
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))
}}
}
58Going Loopy slideshare.net/feyeleanor
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))
}}
}
59Going Loopy slideshare.net/feyeleanor
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))
}}
}
60Going Loopy slideshare.net/feyeleanor
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))
}}
}
61Going Loopy slideshare.net/feyeleanor
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))
}}
}
62Going Loopy slideshare.net/feyeleanor
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
}
64Going Loopy slideshare.net/feyeleanor
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
}
65Going Loopy slideshare.net/feyeleanor
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
}
66Going Loopy slideshare.net/feyeleanor
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
}
67Going Loopy slideshare.net/feyeleanor
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
}
68Going Loopy slideshare.net/feyeleanor
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
}
69Going Loopy slideshare.net/feyeleanor
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
}
70Going Loopy slideshare.net/feyeleanor
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
}
71Going Loopy slideshare.net/feyeleanor
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
}
72Going Loopy slideshare.net/feyeleanor
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
}
73Going Loopy slideshare.net/feyeleanor
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() {print_values(IterableSlice{ 0, 2, 4, 6, 8 })
}
func print_values(iter Iterable) {i := 0iter.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})}
75Going Loopy slideshare.net/feyeleanor
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() {print_values(IterableSlice{ 0, 2, 4, 6, 8 })
}
func print_values(iter Iterable) {i := 0iter.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})}
76Going Loopy slideshare.net/feyeleanor
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() {print_values(IterableSlice{ 0, 2, 4, 6, 8 })
}
func print_values(iter Iterable) {i := 0iter.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})}
77Going Loopy slideshare.net/feyeleanor
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() {print_values(IterableSlice{ 0, 2, 4, 6, 8 })
}
func print_values(iter Iterable) {i := 0iter.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})}
78Going Loopy slideshare.net/feyeleanor
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() {print_values(IterableSlice{ 0, 2, 4, 6, 8 })
}
func print_values(iter Iterable) {i := 0iter.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})}
79Going Loopy slideshare.net/feyeleanor
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() {print_values(IterableSlice{ 0, 2, 4, 6, 8 })
}
func print_values(iter Iterable) {i := 0iter.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})}
80Going Loopy slideshare.net/feyeleanor
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() {print_values(IterableSlice{ 0, 2, 4, 6, 8 })
}
func print_values(iter Iterable) {i := 0iter.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})}
81Going Loopy slideshare.net/feyeleanor
package mainimport . "fmt"
type Iterable interface {Each(f func(int, interface{}))
}
type IterableSlice []intfunc (i IterableSlice) Each(f func(int, interface{})) {
for n, v := range i {f(n, v)
}}
func main() {print_values(IterableSlice{ 0, 2, 4, 6, 8 })
}
func print_values(iter Iterable) {iter.Each(func(i int, v interface{}) {Printf("%v: %v\n", i, v)
})}
82Going Loopy slideshare.net/feyeleanor
package mainimport . "fmt"
type Iterable interface {Each(interface{})
}
type IterableSlice []intfunc (i IterableSlice) Each(f interface{}) {
switch f := f.(type) {case func(interface{}):for _, v := range i { f(v) }
case func(int, interface{}):for n, v := range i { f(n, v) }
}}
func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})s.Each(func(n int, v interface{}) {Printf("%v: %v\n", n, v)
})}
83Going Loopy slideshare.net/feyeleanor
package mainimport . "fmt"
type Iterable interface {Each(interface{})
}
type IterableSlice []intfunc (i IterableSlice) Each(f interface{}) {
switch f := f.(type) {case func(interface{}):for _, v := range i { f(v) }
case func(int, interface{}):for n, v := range i { f(n, v) }
}}
func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})s.Each(func(n int, v interface{}) {Printf("%v: %v\n", n, v)
})}
84Going Loopy slideshare.net/feyeleanor
package mainimport . "fmt"
type Iterable interface {Each(interface{})
}
type IterableSlice []intfunc (i IterableSlice) Each(f interface{}) {
switch f := f.(type) {case func(interface{}):for _, v := range i { f(v) }
case func(int, interface{}):for n, v := range i { f(n, v) }
}}
func main() {s := IterableSlice{ 0, 2, 4, 6, 8 }i := 0s.Each(func(v interface{}) {Printf("%v: %v\n", i, v)i++
})s.Each(func(n int, v interface{}) {Printf("%v: %v\n", n, v)
})}
85Going Loopy slideshare.net/feyeleanor
package mainimport . "fmt"
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 := 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 slideshare.net/feyeleanor
package mainimport . "fmt"
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 := 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 slideshare.net/feyeleanor
package mainimport . "fmt"
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 := 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 slideshare.net/feyeleanor
package mainimport . "fmt"
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 := 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)
}}
}
90Going Loopy slideshare.net/feyeleanor
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:for i := 0; i < 5; i++ {p := []Value{ ValueOf(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())
}}
}
91Going Loopy slideshare.net/feyeleanor
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:for i := 0; i < 5; i++ {p := []Value{ ValueOf(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 slideshare.net/feyeleanor
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:for i := 0; i < 5; i++ {p := []Value{ ValueOf(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 slideshare.net/feyeleanor
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:for i := 0; i < 5; i++ {p := []Value{ ValueOf(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 slideshare.net/feyeleanor
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:for i := 0; i < 5; i++ {p := []Value{ ValueOf(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 slideshare.net/feyeleanor
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]})print_values(func(i int) (v int, ok bool) {
defer func() {ok = recover() == nil
}()v = s[i]return
})}
func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:
print_func(s)case Slice:
for i := 0; i < s.Len(); i++ {print_value(i, s.Index(i))
}}
}
func print_func(s Value) {switch s.Type().NumOut() {case 1:
p := make([]Value, 1)for i := 0; i < 5; i++ {
p[0] = ValueOf(i)print_value(i, s.Call(p)[0])
}case 2:
each(s, func(i int, v Value) {print_value(i, v)
})default:
panic(s.Interface())}
}
func each(s Value, f func(int, Value)) {var i intp := []Value{ ValueOf(0) }r := s.Call(p)for r[1].Bool() {
f(i, r[0])i++p[0] = ValueOf(i)r = s.Call(p)
}}
func print_value(i int, v Value) {Printf("%v: %v\n", i, v.Interface())
}
96Going Loopy slideshare.net/feyeleanor
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]})print_values(func(i int) (v int, ok bool) {
defer func() {ok = recover() == nil
}()v = s[i]return
})}
func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:
print_func(s)case Slice:
for i := 0; i < s.Len(); i++ {print_value(i, s.Index(i))
}}
}
func print_func(s Value) {switch s.Type().NumOut() {case 1:
p := make([]Value, 1)for i := 0; i < 5; i++ {
p[0] = ValueOf(i)print_value(i, s.Call(p)[0])
}case 2:
each(s, func(i int, v Value) {print_value(i, v)
})default:
panic(s.Interface())}
}
func each(s Value, f func(int, Value)) {var i intp := []Value{ ValueOf(0) }r := s.Call(p)for r[1].Bool() {
f(i, r[0])i++p[0] = ValueOf(i)r = s.Call(p)
}}
func print_value(i int, v Value) {Printf("%v: %v\n", i, v.Interface())
}
97Going Loopy slideshare.net/feyeleanor
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]})print_values(func(i int) (v int, ok bool) {
defer func() {ok = recover() == nil
}()v = s[i]return
})}
func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:
print_func(s)case Slice:
for i := 0; i < s.Len(); i++ {print_value(i, s.Index(i))
}}
}
func print_func(s Value) {switch s.Type().NumOut() {case 1:
p := make([]Value, 1)for i := 0; i < 5; i++ {
p[0] = ValueOf(i)print_value(i, s.Call(p)[0])
}case 2:
each(s, func(i int, v Value) {print_value(i, v)
})default:
panic(s.Interface())}
}
func each(s Value, f func(int, Value)) {var i intp := []Value{ ValueOf(0) }r := s.Call(p)for r[1].Bool() {
f(i, r[0])i++p[0] = ValueOf(i)r = s.Call(p)
}}
func print_value(i int, v Value) {Printf("%v: %v\n", i, v.Interface())
}
98Going Loopy slideshare.net/feyeleanor
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]})print_values(func(i int) (v int, ok bool) {
defer func() {ok = recover() == nil
}()v = s[i]return
})}
func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:
print_func(s)case Slice:
for i := 0; i < s.Len(); i++ {print_value(i, s.Index(i))
}}
}
func print_func(s Value) {switch s.Type().NumOut() {case 1:
p := make([]Value, 1)for i := 0; i < 5; i++ {
p[0] = ValueOf(i)print_value(i, s.Call(p)[0])
}case 2:
each(s, func(i int, v Value) {print_value(i, v)
})default:
panic(s.Interface())}
}
func each(s Value, f func(int, Value)) {var i intp := []Value{ ValueOf(0) }r := s.Call(p)for r[1].Bool() {
f(i, r[0])i++p[0] = ValueOf(i)r = s.Call(p)
}}
func print_value(i int, v Value) {Printf("%v: %v\n", i, v.Interface())
}
99Going Loopy slideshare.net/feyeleanor
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]})print_values(func(i int) (v int, ok bool) {
defer func() {ok = recover() == nil
}()v = s[i]return
})}
func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:
print_func(s)case Slice:
for i := 0; i < s.Len(); i++ {print_value(i, s.Index(i))
}}
}
func print_func(s Value) {switch s.Type().NumOut() {case 1:
p := make([]Value, 1)for i := 0; i < 5; i++ {
p[0] = ValueOf(i)print_value(i, s.Call(p)[0])
}case 2:
each(s, func(i int, v Value) {print_value(i, v)
})default:
panic(s.Interface())}
}
func each(s Value, f func(int, Value)) {var i intp := []Value{ ValueOf(0) }r := s.Call(p)for r[1].Bool() {
f(i, r[0])i++p[0] = ValueOf(i)r = s.Call(p)
}}
func print_value(i int, v Value) {Printf("%v: %v\n", i, v.Interface())
}
100Going Loopy slideshare.net/feyeleanor
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]})print_values(func(i int) (v int, ok bool) {
defer func() {ok = recover() == nil
}()v = s[i]return
})}
func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:
print_func(s)case Slice:
for i := 0; i < s.Len(); i++ {print_value(i, s.Index(i))
}}
}
func print_func(s Value) {switch s.Type().NumOut() {case 1:
p := make([]Value, 1)for i := 0; i < 5; i++ {
p[0] = ValueOf(i)print_value(i, s.Call(p)[0])
}case 2:
each(s, func(i int, v Value) {print_value(i, v)
})default:
panic(s.Interface())}
}
func each(s Value, f func(int, Value)) {var i intp := []Value{ ValueOf(0) }r := s.Call(p)for r[1].Bool() {
f(i, r[0])i++p[0] = ValueOf(i)r = s.Call(p)
}}
func print_value(i int, v Value) {Printf("%v: %v\n", i, v.Interface())
}
101Going Loopy slideshare.net/feyeleanor
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]})print_values(func(i int) (v int, ok bool) {
defer func() {ok = recover() == nil
}()v = s[i]return
})}
func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:
print_func(s)case Slice:
for i := 0; i < s.Len(); i++ {print_value(i, s.Index(i))
}}
}
func print_func(s Value) {switch s.Type().NumOut() {case 1:
p := make([]Value, 1)for i := 0; i < 5; i++ {
p[0] = ValueOf(i)print_value(i, s.Call(p)[0])
}case 2:
each(s, func(i int, v Value) {print_value(i, v)
})default:
panic(s.Interface())}
}
func each(s Value, f func(int, Value)) {var i intp := []Value{ ValueOf(0) }r := s.Call(p)for r[1].Bool() {
f(i, r[0])i++p[0] = ValueOf(i)r = s.Call(p)
}}
func print_value(i int, v Value) {Printf("%v: %v\n", i, v.Interface())
}
102Going Loopy slideshare.net/feyeleanor
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]})print_values(func(i int) (v int, ok bool) {
defer func() {ok = recover() == nil
}()v = s[i]return
})}
func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:
print_func(s)case Slice:
for i := 0; i < s.Len(); i++ {print_value(i, s.Index(i))
}}
}
func print_func(s Value) {switch s.Type().NumOut() {case 1:
p := make([]Value, 1)for i := 0; i < 5; i++ {
p[0] = ValueOf(i)print_value(i, s.Call(p)[0])
}case 2:
each(s, func(i int, v Value) {print_value(i, v)
})default:
panic(s.Interface())}
}
func each(s Value, f func(int, Value)) {var i intp := []Value{ ValueOf(0) }r := s.Call(p)for r[1].Bool() {
f(i, r[0])i++p[0] = ValueOf(i)r = s.Call(p)
}}
func print_value(i int, v Value) {Printf("%v: %v\n", i, v.Interface())
}
103Going Loopy slideshare.net/feyeleanor
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]})print_values(func(i int) (v int, ok bool) {
defer func() {ok = recover() == nil
}()v = s[i]return
})}
func print_values(s interface{}) {switch s := ValueOf(s); s.Kind() {case Func:
print_func(s)case Slice:
for i := 0; i < s.Len(); i++ {print_value(i, s.Index(i))
}}
}
func print_func(s Value) {switch s.Type().NumOut() {case 1:
p := make([]Value, 1)for i := 0; i < 5; i++ {
p[0] = ValueOf(i)print_value(i, s.Call(p)[0])
}case 2:
each(s, func(i int, v Value) {print_value(i, v)
})default:
panic(s.Interface())}
}
func each(s Value, f func(int, Value)) {var i intp := []Value{ ValueOf(0) }r := s.Call(p)for r[1].Bool() {
f(i, r[0])i++p[0] = ValueOf(i)r = s.Call(p)
}}
func print_value(i int, v Value) {Printf("%v: %v\n", i, v.Interface())
}
104Going Loopy slideshare.net/feyeleanor
http://golang.org/
Going Loopy 114 slideshare.net/feyeleanor