Golang variables: Difference between revisions

From wikinotes
Line 19: Line 19:
const myVar := "hi"  // variable that cannot be reassigned
const myVar := "hi"  // variable that cannot be reassigned
const MyVar := "hi"  // exported variable, that cannot be reassigned
const MyVar := "hi"  // exported variable, that cannot be reassigned
const myVar = 2      // infer constant type
</syntaxhighlight>
</syntaxhighlight>


Line 26: Line 28:
* Constants must be assigned a immutable type (ex. collections are mutable, so they cannot be constants)
* Constants must be assigned a immutable type (ex. collections are mutable, so they cannot be constants)
* Inner scopes can declare the same constant with a new value. It will superseed the outer constant's value while working within that scope.
* Inner scopes can declare the same constant with a new value. It will superseed the outer constant's value while working within that scope.
* If inferring a constant, it's type may take on the type of an operation it is used with. (likely best to explicitly declare type)
</blockquote><!-- Constants -->
</blockquote><!-- Constants -->



Revision as of 18:20, 29 May 2022

Assignment

// declare and assign variable
var name string
name = "foo"

// declare and assign var in one step
var name string = "foo"

// declare and assign variable, inferring type
name := "foo"

Constants

const myVar := "hi"  // variable that cannot be reassigned
const MyVar := "hi"  // exported variable, that cannot be reassigned

const myVar = 2      // infer constant type

There are some rules for constant:

  • Constants cannot be assigned at runtime (ex. the result of a function). They must be static at compile time.
  • Constants must be assigned a immutable type (ex. collections are mutable, so they cannot be constants)
  • Inner scopes can declare the same constant with a new value. It will superseed the outer constant's value while working within that scope.
  • If inferring a constant, it's type may take on the type of an operation it is used with. (likely best to explicitly declare type)

Type Conversion

float32(123) == 123.        // cast int as float32
string(107) == "k"          // retrieve char for 107 in ascii chart
strconv.Itoa(107) == "107"  // represent 107 as string

Introspection

fmt.Prinf("%T\n", myVar)   // print type of myVar

Mutability

Mutable

- Arrays
- Maps
- Channels
- Structs

Immutable

- Interfaces
- Booleans
- Numeric Types
- Strings
- Pointers

Scope