add: slice expressions
This commit is contained in:
38
15-slices/08-slice-expressions/1-theory/main.go
Normal file
38
15-slices/08-slice-expressions/1-theory/main.go
Normal file
@ -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], '!'))
|
||||||
|
}
|
59
15-slices/08-slice-expressions/2-example/main.go
Normal file
59
15-slices/08-slice-expressions/2-example/main.go
Normal file
@ -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])
|
||||||
|
}
|
49
15-slices/09-slice-expressions-pagination/main.go
Normal file
49
15-slices/09-slice-expressions-pagination/main.go
Normal file
@ -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)
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user