Go - gwenn/hypomnemata GitHub Wiki

Values vs References

  • array: value type.
  • channel: reference type (with 'make').
  • map: reference type (with 'make').
  • slice: reference type (with 'make').
  • string: const (immutable) reference type.
  • user defined data type: value type except with 'new': pointer/reference type.

Zero values

package main

import "fmt"

func main() {
	var i int
	fmt.Printf("int: %d\n", i) // int: 0
	var f float64
	fmt.Printf("float: %f\n", f) // float: 0.000000
	var s string
	fmt.Printf("string: '%v'\n", s) // string: ''
	var b bool
	fmt.Printf("bool: %t\n", b) // bool: false
	var a interface{}
	fmt.Printf("any: %v\n", a) // any: <nil>

	var sl []interface{}
	fmt.Printf("slice: %v\n", sl) // slice: []
	// sl[0] = 1 panic
	var sli []interface{} = make([]interface{}, 2)
	fmt.Printf("slice init: %v\n", sli) // slice init: [<nil> <nil>]
	sli[0] = 1

	var m map[string]int
	fmt.Printf("map: %v\n", m) // map: map[]
	// m["test"] = 1 panic
	var mi map[string]int = make(map[string]int)
	fmt.Printf("map init: %v\n", mi) // slice init: map[]
	mi["test"] = 1
}

Exponential:

package main

import "fmt"

func main() {
  var rate float64 = 3. / 100.
  fmt.Printf("Rate: %.2f\n", rate)
  var initial_amount float64 = 100.
  amount := initial_amount
  for year := 1; amount < (initial_amount * 2); year++ {
    amount += amount * rate
    fmt.Printf("After %d years: %.2f\n", year, amount)
  }
}
⚠️ **GitHub.com Fallback** ⚠️