Go’s basic types are
- int int8 int16 int32 int64
- uint uint8 uint16 uint32 uint64 uintptr
- byte // alias for uint8
- rune // alias for int32, represents a Unicode code point
- float32 float64
- complex64 complex128
uintptr types are usually 32 bits wide on 32-bit systems and 64 bits wide on 64-bit systems. When you need an integer value you should use int unless you have a specific reason to use a sized or unsigned integer type.
Strings are made of
runes which are unicode code points. If you take the length of a string, you might not get what you expect. The following prints 3:
If you iterate over a string using
range, you’ll get runes, not bytes.
Strings and byte arrays are closely related. We can easily convert one to the other:
stra := "the spice must flow" byts := byte(stra) strb := string(byts)
Do note that when you use
string(X), you’re creating a copy of the data. This is necessary because strings are immutable.
T(v) converts the value
v to the type
T. Unlike in C, Go assignment between items of different type requires an explicit conversion.
When declaring a variable without specifying an explicit type (either by using the
:= syntax or
var = expression syntax), the variable’s type is inferred from the value on the right hand side. When the right hand side of the declaration is typed, the new variable is of that same type. But when the right hand side contains an untyped numeric constant, the new variable may be an
complex128 depending on the precision of the constant.