// Package container gives you a []byte slice on steroids, allowing for quick data appending, prepending and fetching as well as transparent error transportation.
//
// A Container is basically a [][]byte slice that just appends new []byte slices and only copies things around when necessary.
//
// Byte slices added to the Container are not changed or appended, to not corrupt any other data that may be before and after the given slice.
// If interested, consider the following example to understand why this is important:
//
//	package main
//
//	import (
//		"fmt"
//	)
//
//	func main() {
//		a := []byte{0, 1,2,3,4,5,6,7,8,9}
//		fmt.Printf("a: %+v\n", a)
//		fmt.Printf("\nmaking changes...\n(we are not changing a directly)\n\n")
//		b := a[2:6]
//		c := append(b, 10, 11)
//		fmt.Printf("b: %+v\n", b)
//		fmt.Printf("c: %+v\n", c)
//		fmt.Printf("a: %+v\n", a)
//	}
//
// run it here: https://play.golang.org/p/xu1BXT3QYeE
package container