Golang datatypes: Difference between revisions
From wikinotes
(→Arrays) |
(→Arrays) |
||
Line 129: | Line 129: | ||
family[0] = "will" | family[0] = "will" | ||
family[1] = "alex" | family[1] = "alex" | ||
</syntaxhighlight> | |||
While arrays are mutable, when assigning an array to a new variable, | |||
you're actually duplicating the array. | |||
<syntaxhighlight lang="go"> | |||
numbers := [...]int{1, 2, 3} | |||
copy_of_numbers := numbers | |||
copy_of_numbers[1] = 9 // <-- does not change 'numbers' | |||
fmt.Println(numbers) // [1 2 3] | |||
fmt.Println(copy_of_numbers) // [1 9 3] | |||
</syntaxhighlight> | </syntaxhighlight> | ||
</blockquote><!-- Arrays --> | </blockquote><!-- Arrays --> |
Revision as of 20:15, 29 May 2022
Literal Types
"foo" // string 123 // int (cpu-arch dependent bitsize) 3.14 // float64 6.2e25 // float64 true, false // bool
Boolean
var condition bool = true
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" // concatenationRune
Runes are UTF-32 strings.
(Each character is auint32
)
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,807unsigned
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 existBytes
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 + 2iYou 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
Arrays
Arrays are statically-sized, homogenous collections of items,
stored contiguously in memory.family := [2]string{"will", "alex"} // create 2-item array with these elements family := [...]string{"will", "alex"} // create whose size matches provided elements var family [2]string // create 2-item array, then assign elements family[0] = "will" family[1] = "alex"While arrays are mutable, when assigning an array to a new variable, you're actually duplicating the array.
numbers := [...]int{1, 2, 3} copy_of_numbers := numbers copy_of_numbers[1] = 9 // <-- does not change 'numbers' fmt.Println(numbers) // [1 2 3] fmt.Println(copy_of_numbers) // [1 9 3]