ДАННАЯ СТАТЬЯ НУЖДАЕТСЯ В РЕДАКТИРОВАНИИ.
СИСТЕМАТИЗИРОВАТЬ И АКТУАЛИЗИРОВАТЬ В СООТВЕТСТВИИ С ГИТОМ
int8: представляет целое число от -128 до 127 и занимает в памяти 1 байт (8 бит)
int16: представляет целое число от -32768 до 32767 и занимает в памяти 2 байта (16 бит)
int32: представляет целое число от -2147483648 до 2147483647 и занимает 4 байта (32 бита)
int64: представляет целое число от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 и занимает 8 байт (64 бита)
uint8: представляет целое число от 0 до 255 и занимает 1 байт
uint16: представляет целое число от 0 до 65535 и занимает 2 байта
uint32: представляет целое число от 0 до 4294967295 и занимает 4 байта
uint64: представляет целое число от 0 до 18 446 744 073 709 551 615 и занимает 8 байт
byte: синоним типа uint8, представляет целое число от 0 до 255 и занимает 1 байт
rune: синоним типа int32, представляет целое число от -2147483648 до 2147483647 и занимает 4 байта
int: представляет целое число со знаком, которое в зависимости о платформы может занимать либо 4 байта, либо 8 байт. То есть соответствовать либо int32, либо int64.
uint: представляет целое беззнаковое число только без знака, которое, аналогично типу int, в зависимости о платформы может занимать либо 4 байта, либо 8 байт. То есть соответствовать либо uint32, либо uint64.
float32: представляет число с плавающей точкой от 1.410-45 до 3.41038(для положительных). Занимает в памяти 4 байта (32 бита)
float64: представляет число с плавающей точкой от 4.910-324 до 1.810308 (для положительных) и занимает 8 байт.
complex64: комплексное число, где вещественная и мнимая части представляют числа float32
complex128: комплексное число, где вещественная и мнимая части представляют числа float64
\n: переход на новую строку
\r: возврат каретки
\t: табуляция
": двойная кавычка внутри строк
\: обратный слеш
test := [...]int{1, 2, 3, 4}
test := [4]int{1, 2, 3, 4}
var test = [...]int{1, 2, 3}
users1 := []string{"Alpha", "Beta", "Gamma", "Delta"}
var users3 = []string{"Bob", "Alice", "Kate", "Sam", "Tom", "Paul", "Mike", "Robert"}
var users2 []string = make([]string, 3) //Создает срез из трех элементов
users2 = append(users3, "Boba") //Импортирует элемент в срез
var le = 2
var test []string
test = append(users1[:le], users1[le+1:]...) //Создает срез, где отсутствует элемент (Gamma)
var people = map[string]int{
"Tom": 1,
"Bob": 2,
"Dima": 3,
}
people1 := make(map[string]int)
people1["Kate"] = 128
delete(people1, "Kate")
type person struct {
name string
age int
}
var tom person = person{"Michael", 22}
bob := person{name: "Bob", age: 31}
type library []string
type test int
type person map[string]int
type file3 struct {
text string
}
type folder3 struct {
name string
}
type stream3 interface {
read() string
write(string)
close()
}
// *******
func writeToStream(streamm stream3, text string) {
streamm.write(text)
}
func closeStream(streamm stream3) {
streamm.close()
}
// *******
func (f *file3) read() string {
return f.text
}
func (f *file3) write(message string) {
f.text = message
}
func (f *file3) close() {
fmt.Println("Файл закрыт: " + f.text)
}
//*******
func main() {
myfile := file3{}
//myfile.write("123")
//fmt.Println(myfile.read())
//myfile.close()
writeToStream(&myfile, "YESS")
closeStream(&myfile)
}
==
>
<
<=
>=
!=
!
&&
||
Пример функции:
func имя_функции (список_параметров) тип_возвращаемого_значения {
выполняемые_операторы
return возвращаемое_значение
}
func wtf(numbers ...int)
act(10, 5, func(x, y int) int { return x * y })
len() - Получить длинну (к примеру массива)
cap() - Получить емкость (к примеру канала)
append() - Добавление в срез
make() - Создает срез/канал из нескольких элементов
delete() - Удаление элемента из map
defer () - Выполняет указанный код в конце программы.
panic () - Выводит ошибку и выходит из программы
users := [5]string{"Alpha", "Beta", "Gamma", "Delta", "Epsilon"}
var numbers [5]int = [5]int{1, 2, 3, 4, 5}
var numbers2 [5]int = [5]int{1, 5}
numbers3 := [3]int{2, 4, 6}
numbers4 := [...]int{1, 2, 3, 4}
colors := [3]string{2: "blue", 0: "red", 1: "gog"}
users := []string{"Alpha", "Beta", "Gamma", "Delta"}
users[0] = "Alpen"
var users3 []string = make([]string, 3) //Создает срез из трех элементов
var users4 []string
users4 = append(users2, "Boba")
initialUsers := [8]string{"Bob", "Alice", "Kate", "Sam", "Tom", "Paul", "Mike", "Robert"}
users1 := initialUsers[2:6] // с 3-го по 6-й
users2 := initialUsers[:4] // с 1-го по 4-й
users3 := initialUsers[3:] // с 4-го до конца
le := 3
test = append(initialUsers[:le], initialUsers[le+1:]...) #Удаляет элемент с индексом 3.
people1 := make(map[string]int)
people1["Kate"] = 128
delete(people1, "Kate")
var people = map[string]int{
"Tom": 1,
"Bob": 2,
"Dima": 3,
}
if val, ok := people["Tom"]; ok {
fmt.Println(val)
}
Если значение по заданному ключу имеется в отображении, то переменная ok будет равна true, а переменная val будет хранить полученное значение. Если переменная ok равна false, то значения по ключу в отображении нет.
a := 6
b := &a //Так мы присваиваем переменной b значение в памяти. К примеру 0xc00000a0e8
c := *b //А так мы расшифровываем значение переменной из значения в памяти 0xc00000a0e8 (получим 6)
b := &a
fmt.Println(b) //0xc00000a0e8
fmt.Println(*b) //6
x := 66 #Задаем переменную
var p *int #p теперь является указателем
p = &x #Делаем указатель на переменную x
*p = 222 #Меняем значение переменной указателя
fmt.Println(*p) #Выводим значение переменной указателя
fmt.Println(p) #Выводим значение указателя
a := 6
fa := &a
Дополнительно мы можем использовать указатели для возвращения результата из функции:
func changeValue(x *int){
*x = (*x) * (*x)
}
func main() {
d := 5
fmt.Println("d before:", d) // 5
changeValue(&d)
}
type pers struct {
name string
age int
}
type contact struct {
name string
email string
contact pers
}
var tom = contact{
name: "Gosling",
email: "test@mail.com",
contact: pers{
name: "Nmae",
age: 12,
},
}
tom.contact.name = "Gooool"
fmt.Println(tom)
type person struct{
name string
age int
}
func (p person) print(){
fmt.Println("Имя:", p.name)
fmt.Println("Возраст:", p.age)
}
func (p person) eat(meal string){
fmt.Println(p.name, "ест", meal)
}
func main() {
var tom = person { name: "Tom", age: 24 }
tom.print()
tom.eat("борщ с капустой, но не красный")
}
Оператор type
позволяет нам задать свое название именнованного типа на основе другого. К примеру:
type GB int
Установка на windows:
setx GOPATH C:\Users\taxon\Documents\Golang
Установка на debian:
в файле .profile добавляем строки:
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin