Golang datatypes

From wikinotes
Revision as of 17:54, 29 May 2022 by Will (talk | contribs) (→‎String)

Literal Types

"foo"    // string
123      // int (cpu-arch dependent bitsize)
3.14     // float64
6.2e25   // float64

Text

String

Go's strings are bytestrings by default.
The are treated as arrays of bytes.

  • Strings are immutable.
  • Strings are UTF-8

TODO:

write some best pratices for handling multi-byte characters

var name string = "will"                 // string
name := "will"                           // string

// slices
var ascii_code uint8 = name[1]           // 2nd char from string
var char string = string(ascii_code)     // get string from ASCII code

bytestring := []byte("hi") == [104, 105] // string as bytes (uint8)

// operators
msg := "hello " + "world"                // concatenation

Rune

Runes are UTF-32 strings.
(Each character is a uint32)

Numeric

Integers

Integer sizes are expressed by their bit-size.

signed

int     //  (however many bits your CPU word-size is)
int8    //                       128 - 127
int16   //                    32,768 - 32,767
int32   //             2,147,483,648 - 2,147,483,647
int64   // 9,223,372,036,854,775,808 - 9,223,372,036,854,775,807

unsigned

uint     // (however many bits your CPU word-size is)
uint8    // 0 - 255
uint16   // 0 - 65,535
uint32   // 0 - 4,294,967,295
// uint64 does not exist

Bytes

Same as uint8.

math/big

Slow, but handles numbers of any size.

Complex Numbers

Go lets you represent complex/imaginary numbers.

var num complex64 = 1 + 2i
var num complex128 = 1 + 2i

var num complex64 = 2i            // alternative for 1 + 2i
var num complex64 = complex(1, 2) // alternative for 1 + 2i

You can also extract the complex/imaginary part of the number.

var num complex64 = 1 + 2i
real(num) // the real number component
imag(num) // the imaginary number component

Pointers

uintptr  // a pointer of however many bits your CPU word-size is

Collections

Compound Types