Files
2021-06-08 11:19:26 +03:00

134 lines
3.7 KiB
Go

// Copyright © 2018 Inanc Gumus
// Learn Go Programming Course
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
//
// For more tutorials : https://learngoprogramming.com
// In-person training : https://www.linkedin.com/in/inancgumus/
// Follow me on twitter: https://twitter.com/inancgumus
package main
import (
s "github.com/inancgumus/prettyslice"
)
func main() {
// ########################################################
//
// #1: Create a string slice: `names` with a length and
// capacity of 5, and print it.
//
names := make([]string, 5)
s.Show("1st step", names)
// ########################################################
//
// #2: Append the following names to the names slice:
//
// "einstein", "tesla", "aristotle"
//
// Print the names slice.
//
// Observe how the slice and its backing array change.
//
// Expected output:
// ["" "" "" "" "" "einstein", "tesla", "aristotle"]
//
names = append(names, "einstein", "tesla", "aristotle")
s.Show("2nd step", names)
// ########################################################
//
// #3: Overwrite the name slice by creating a new slice
// using make().
//
// Adjust the make() function so that it creates a
// slice with capacity of 5, and puts the slice pointer
// to the first index.
//
// Then append the following names to the slice:
//
// "einstein", "tesla", "aristotle"
//
// Expected output:
// ["einstein", "tesla", "aristotle" "" ""]
//
// So: Overwrite and print the names slice.
//
names = make([]string, 0, 5)
names = append(names, "einstein", "tesla", "aristotle")
s.Show("3rd step", names)
// ########################################################
//
// #4: Copy only the first two elements of the following
// array to the last two elements of the `names` slice.
//
// Print the names slice, you should see 5 elements.
// So, do not forget extending the slice.
//
// Observe how its backing array stays the same.
//
moreNames := [...]string{"plato", "khayyam", "ptolemy"}
copy(names[3:5], moreNames[:2])
names = names[:cap(names)]
s.Show("4th step", names)
// ########################################################
//
// #5: Only copy the last 3 elements of the `names` slice
// to a new slice: `clone`.
//
// Append the first two elements of the `names` to the
// `clone`.
//
// Ensure that after appending no new backing array
// allocations occur for the `clone` slice.
//
// Print the clone slice before and after the append.
//
clone := make([]string, 3, 5)
copy(clone, names[len(names)-3:])
s.Show("5th step (before append)", clone)
clone = append(clone, names[:2]...)
s.Show("5th step (after append)", clone)
// ########################################################
//
// #6: Slice the `clone` slice between 2nd and 4th (inclusive)
// elements into a new slice: `sliced`.
//
// Append "hypatia" to the `sliced`.
//
// Ensure that new backing array allocation "occurs".
//
// Change the 3rd element of the `clone` slice
// to "elder".
//
// Doing so should not change any elements of
// the `sliced` slice.
//
// Print the `clone` and `sliced` slices.
//
//
sliced := clone[1:4:4]
sliced = append(sliced, "hypatia")
clone[2] = "elder"
s.Show("6th step", clone, sliced)
}
//
// Don't mind about this function.
//
// For printing the slices: You can either use the
// prettyslice package or `fmt.Printf`.
//
func init() {
s.PrintBacking = true // prints the backing array
s.MaxPerLine = 10 // prints 10 slice elements per line
s.Width = 60 // prints 60 character per line
}