Skip to content

Data Types ​

Integer ​

SignedUnsigned
int8uint8 (byte)
int16uint16
int32 (rune)uint32
int64uint64

Mark directly with int, which is the recommended method, would automaticly use the word size of the OS (32/64). This is also the case for uintptr and uint.

Float ​

  • float32
  • float64
  • NaN (Representing non-number values: 0/0, etc.)

Float numbers are not precise, use float64 for maximum approximity.

Check the type of a float variable with reflect package:

go
package main
import (
  "fmt"
  "reflect"
)
func main() {
  a := 1.4
  fmt.Println("Type of variable a is refered as: ", reflect.TypeOf(a))
}

Use math/big package to compare 2 floats.

Boolean ​

An integer with a length of 1.

Only true or false is valid boolean value, 1 or "true" won't pass.

Character ​

Single character, define with single quotes. It would be transformed into an interger value represented in utf8.

Usually, each charater in a string represents one byte. Yet for some language, one character is represented with multiple bytes.

go
var a = 'A'

String ​

Create a string with " or ` symbols.

go
string(abc) // Transform a value to string
len(xyz) // Get string length
"abc" + "xyz" // Concat two strings into one
"CdeXyz"[2] // Get the 3rd character of the string. The output is 101, because single character is represented by a byte (a uint8).

Escape characters:

CharacterMeaning
\rReturn
\nNext Line (same position)
\tTab
\', \"Quotes
\\Back Slash

Original string:

go
s := `All characters, for example "c:\Users\kamaslau\Apps" will be displayed as original, no escape signs are needed.`

获取字符串底层字节数组的长度:

go
length := len(stringName)

获取字符串实际字符(rune 类型的字符串)个数:

go
import "unicode/utf8"

utf8.RuneCountInString(stringName)

Array ​

Array in Golang is a value type, not a reference type. This means that when pass an array to a function, all values would be copied, so change won't be made to the original variable.

All items in array are stored consecutively in memory, and all items are of a same data type.

The length of an array is not mutable.

Declare an array with its length and data type:

go
a := [5]int{1,2,3,4,5}

Give or change value of an item with position index:

go
a[2]
a[2] = 3

Pointer ​

Variable could be a pointer type, a pointer states a memory address.

go
var a *int // a pointer of int type
a := new(int) // Initiate a value, then return its pointer
*a = 0 // Set the value for pointer position
var aPointer = &a // Get the pointer of variable a

Slice ​

go
var x[]float64

// This creates a slice of float64 type with a length of 5 and a capacity of 10. The capacity of the underlying array can be larger than the length of the slice, allowing for future growth.
x := make([]float64, 5, 10)

// Create a slice from an array
arr := [5]float64{1,2,3,4,5}
x := arr[0:5] // the end index is 4, but it is not included so needs to use 5 as ending point index
x := arr[0:] // till the end, equals to arr[0:len(arr)]
x := arr[:5] // from the start, equals to arr[0:5]
x := arr[:] // equals to arr[0:len(arr)]

Append ​

go
func main() {
  slice1 := []int{1,2,3}
  slice2 := append(slice1, 4, 5)
  fmt.Println(slice1, slice2)
}

Copy ​

go
func main() {
  slice1 := []int{1,2,3}
  slice2 := make([]int, 2)
  copy(slice2, slice1)
  fmt.Println(slice1, slice2)
}

If length of two slices are not equal, the shorter length will be used.

Map ​

go
x := make(map[string]int)
x["key"] = 10
fmt.Println(x["key"])

// Or
elements := map[string]string{
    "H":  "Hydrogen",
    "He": "Helium",
}

Check if a key value exists:

go
if name, ok := elements["Un"]; ok {
  fmt.Println(name, ok)
}

Delete ​

go
delete(x, 1)