diff --git a/15-slices/08-slice-expressions/1-theory/main.go b/15-slices/08-slice-expressions/1-theory/main.go new file mode 100644 index 0000000..6951b2b --- /dev/null +++ b/15-slices/08-slice-expressions/1-theory/main.go @@ -0,0 +1,38 @@ +// For more tutorials: https://blog.learngoprogramming.com +// +// Copyright © 2018 Inanc Gumus +// Learn Go Programming Course +// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ +// + +package main + +import ( + s "github.com/inancgumus/prettyslice" +) + +func main() { + msg := []byte{'h', 'e', 'l', 'l', 'o'} + s.Show("msg", msg) + + s.Show("msg[0:1]", msg[0:1]) + s.Show("msg[0:2]", msg[0:2]) + s.Show("msg[0:3]", msg[0:3]) + s.Show("msg[0:4]", msg[0:4]) + s.Show("msg[0:5]", msg[0:5]) + + // default indexes + s.Show("msg[0:]", msg[0:]) + s.Show("msg[:5]", msg[:5]) + s.Show("msg[:]", msg[:]) + + // error: beyond + // s.Show("msg", msg)[:6] + + s.Show("msg[1:4]", msg[1:4]) + + s.Show("msg[1:5]", msg[1:5]) + s.Show("msg[1:]", msg[1:]) + + s.Show("append(msg)", append(msg[:4], '!')) +} diff --git a/15-slices/08-slice-expressions/2-example/main.go b/15-slices/08-slice-expressions/2-example/main.go new file mode 100644 index 0000000..b30172b --- /dev/null +++ b/15-slices/08-slice-expressions/2-example/main.go @@ -0,0 +1,59 @@ +// For more tutorials: https://blog.learngoprogramming.com +// +// Copyright © 2018 Inanc Gumus +// Learn Go Programming Course +// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ +// + +package main + +import ( + "fmt" + + s "github.com/inancgumus/prettyslice" +) + +func main() { + // think of this as search results of a search engine. + // it could have been fetched from a database + items := []string{ + "pacman", + "mario", + "tetris", + "doom", + "galaga", + "frogger", + "asteroids", + "simcity", + "metroid", + "defender", + "rayman", + "tempest", + "ultima", + } + + s.MaxPerLine = 4 + s.Show("All items", items) + + top3 := items[:3] + s.Show("Top 3 items", top3) + + l := len(items) + + // you can use variables in a slice expression + last4 := items[l-4:] + s.Show("Last 4 items", last4) + + // reslicing: slicing another sliced slice + mid := last4[1:3] + s.Show("Last4[1:3]", mid) + + // the same elements can be in different indexes + // fmt.Println(items[9], last4[0]) + + // slicing returns a slice with the same type of the sliced slice + fmt.Printf("slicing : %T %[1]q\n", items[2:3]) + + // indexing returns a single element with the type of the indexed slice's element type + fmt.Printf("indexing: %T %[1]q\n", items[2]) +} diff --git a/15-slices/09-slice-expressions-pagination/main.go b/15-slices/09-slice-expressions-pagination/main.go new file mode 100644 index 0000000..337ceaf --- /dev/null +++ b/15-slices/09-slice-expressions-pagination/main.go @@ -0,0 +1,49 @@ +// For more tutorials: https://blog.learngoprogramming.com +// +// Copyright © 2018 Inanc Gumus +// Learn Go Programming Course +// License: https://creativecommons.org/licenses/by-nc-sa/4.0/ +// + +package main + +import ( + "fmt" + + s "github.com/inancgumus/prettyslice" +) + +func main() { + // think of this as search results of a search engine. + // it could have been fetched from a database + items := []string{ + "pacman", "mario", "tetris", "doom", + "galaga", "frogger", "asteroids", "simcity", + "metroid", "defender", "rayman", "tempest", + "ultima", + } + + // s.Show("0:4", items[0:4]) + // s.Show("4:8", items[4:8]) + // s.Show("8:12", items[8:12]) + // s.Show("12:13", items[12:13]) + // s.Show("12:14", items[12:14]) // error + + l := len(items) + + const pageSize = 4 + + for from := 0; from < l; from += pageSize { + to := from + pageSize + if to > l { + to = l + } + + // fmt.Printf("%d:%d\n", from, to) + + currentPage := items[from:to] + + head := fmt.Sprintf("Page #%d", (from/pageSize)+1) + s.Show(head, currentPage) + } +}