Go Integers

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

External

Internal

Overview

Integers are designated by the following pre-declared type identifiers.

In most cases, we simply declare an int (signed integer) or uint (unsigned integer) and leave it to the compiler to allocate the right type of integer, depending on the underlying architecture. If we want to get specific, we can use:

  • Unsigned integers represented on the specified number of bits: uint8 (byte), uint16, uint32 (rune, also see strings), uint64.
  • Signed integers, represented on the specified number of bits: int8, int16, int32, int64. Internally they are stored in 2's complement representation.
  • Machine-dependent integers: uint, int and uintptr. int, for example, can be 4 bytes or 8 bytes long, depending on the underlying architecture.

When a regular integer is needed in the program, int should be the default.

The uninitialized value is 0.

Integer Variable Declaration

var i int         // string type declaration without initialization
i = 1             // initialization after declaration
var i2 int = 2    // variable initialization in declaration
var i3 = 3        // variable initialization with type inference
i4 := 4           // short variable declaration

Max and Min Values

Available as costs in the math package:

const (
	MaxInt    = 1<<(intSize-1) - 1  // MaxInt32 or MaxInt64 depending on intSize.
	MinInt    = -1 << (intSize - 1) // MinInt32 or MinInt64 depending on intSize.
	MaxInt8   = 1<<7 - 1            // 127
	MinInt8   = -1 << 7             // -128
	MaxInt16  = 1<<15 - 1           // 32767
	MinInt16  = -1 << 15            // -32768
	MaxInt32  = 1<<31 - 1           // 2147483647
	MinInt32  = -1 << 31            // -2147483648
	MaxInt64  = 1<<63 - 1           // 9223372036854775807
	MinInt64  = -1 << 63            // -9223372036854775808
	MaxUint   = 1<<intSize - 1      // MaxUint32 or MaxUint64 depending on intSize.
	MaxUint8  = 1<<8 - 1            // 255
	MaxUint16 = 1<<16 - 1           // 65535
	MaxUint32 = 1<<32 - 1           // 4294967295
	MaxUint64 = 1<<64 - 1           // 18446744073709551615
)
import math

...
math.MaxInt
)

Integer Literals

Operators

Binary Operators

Arithmetic: +, -, *, /, %, <<, >>

Comparison: ==, !=, >, <, >=, <=

Boolean: &&, ||

byte

byte is unsigned int represented on a byte (uint8).

Indexing operator [] applied to strings return bytes.

Conversion between bytes and strings

A single byte can be converted to string as follows:

var b byte = 65 // decimal ASCII for "A"
str := string(b) // str is "A"

The following expression converts a string to a slice of bytes:

bytes := []byte("test")
rawJSON := []byte(`{
  "something": "something else",
  "colors": [
     "red",
     "blue",
     "green"
  ]
}`)

The following expression converts a slice of bytes to string:

str := string(bytes)

Also see:

Conversion between Types
String Conversions

Integers as characters

i := 'A'
j := i + 1
fmt.Printf("%c %d\n", j, j)

Also see:

fmt.Printf()

Integers to Strings

i := 0
string(48 + i)