add: slice internals exercises
This commit is contained in:
34
16-slices/exercises/20-observe-the-cap-growth/main.go
Normal file
34
16-slices/exercises/20-observe-the-cap-growth/main.go
Normal file
@ -0,0 +1,34 @@
|
||||
package main
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// EXERCISE: Observe the capacity growth
|
||||
//
|
||||
// Write a program that loops 10 million times to append an element
|
||||
// to a slice, on each step of the loop. Observe the capacity.
|
||||
//
|
||||
//
|
||||
// STEPS
|
||||
//
|
||||
// 1. Create a nil slice
|
||||
//
|
||||
// 2. Loop 10e6 times
|
||||
//
|
||||
// 3. On each loop step: Append an element to the slice
|
||||
//
|
||||
// 4. Only print the length and capacity of the slice everytime
|
||||
// the capacity changes.
|
||||
//
|
||||
// 5. Print also the growth rate by calculating the previous and
|
||||
// the current capacity.
|
||||
//
|
||||
//
|
||||
// EXPECTED OUTPUT
|
||||
//
|
||||
// len:0 cap:0 growth:NaN
|
||||
// len:1 cap:1 growth:+Inf
|
||||
// len:2 cap:2 growth:2.00
|
||||
// ... and so on.
|
||||
//
|
||||
// ---------------------------------------------------------
|
||||
|
||||
func main() {}
|
@ -0,0 +1,29 @@
|
||||
// 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"
|
||||
|
||||
func main() {
|
||||
var (
|
||||
nums []int
|
||||
oldCap float64
|
||||
)
|
||||
|
||||
for len(nums) < 10e6 {
|
||||
c := float64(cap(nums))
|
||||
|
||||
if c == 0 || c != oldCap {
|
||||
fmt.Printf("len:%-15d cap:%-15g growth:%-15.2f\n",
|
||||
len(nums), c, c/oldCap)
|
||||
}
|
||||
oldCap = c
|
||||
|
||||
nums = append(nums, 1)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user