Со знаком:
int // Зависит от платформы (32 или 64 бита)
int8 // -128 до 127
int16 // -32768 до 32767
int32 // -2^31 до 2^31-1 (также известен как rune)
int64 // -2^63 до 2^63-1
Без знака:
uint // Аналог int, но без знака
uint8 // 0 до 255 (также известен как byte)
uint16 // 0 до 65535
uint32 // 0 до 2^32-1
uint64 // 0 до 2^64-1
uintptr // Для хранения указателей
float32 // 32-битное число с плавающей точкой (IEEE-754)
float64 // 64-битное (рекомендуется для большинства случаев)
complex64 // float32 + float32
complex128 // float64 + float64
Пример:
c := 3 + 4i
fmt.Println(real(c), imag(c)) // 3 4
bool // true или false
string // неизменяемая последовательность байт (обычно UTF-8)
type Person struct {
Name string
Age int
}
type Reader interface {
Read(p []byte) (n int, err error)
}
import "time"
now := time.Now()
ch := make(chan int)
var p *int
num := 42
p = &num
var arr [5]int // Массив (фиксированная длина)
slice := []int{1,2} // Срез (динамический массив)
type HandlerFunc func(http.ResponseWriter, *http.Request)
type ID = string
type UserID string // Новый тип, не алиас
var any interface{} // Может хранить любое значение
type error interface {
Error() string
}
json.Number // Для обработки чисел в JSON
byte // алиас для uint8
rune // алиас для int32 (кодовая точка Unicode)
m := make(map[string]int)
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
var val interface{} = "hello"
s := val.(string)
Особенности системы типов Go: