Golang

Golang или просто Go — это язык программирования с открытым исходным кодом, который упрощает создание простого, надежного и эффективного программного обеспечения.

Разбираемся с основными конструкциями на примерах.

Особенности структуры программы на языке Go

Программа на Go — это пакет. Каждый пакет — библиотека, а также пакет может быть основной программой.

package main // название пакета

// Библиотеки(пакеты) необходимые для выполнения программы текущей программы
import "fmt"

// main - основная функция, выполняться при запуске программы
func main() {
	// содержимое функции
	fmt.Println("Hello World")
}

Комментарии

Комментарии в Go бывают однострочные и многострочные.

// Однострочный комментарий, действует с начала и до конца строки

/* Многострочный комментарий.
Слэш и звездочка начинают комментарий, 
звездочка и слэш заканчивают комментарий
Все что между ними просто информация не влияющая на 
работу программы*/

Переменные, константы, типы данных

Переменная может менять свое значение во время работы программы, константа после объявления не меняет свое значение.

var per string
// Строковая переменная, значение можно менять в процессе выполнения программы
var perz string = "Привет, мир"
// Строковая переменная с установленным значением

var chislo int 
var chislo int32 = 64
// Целочисленные переменные

var Drob float32 = 3.14
// Переменная дробное число

Вывод на экран

За вывод отвечает библиотека fmt, поэтому для работы необходимо подключить её в разделе import

func main() {
	// Print - выводим что-то и оставляем курсор на этой же строке
	fmt.Print("Привет,")
	// Println - выводим что-то и переводим курсор на новую строку
	fmt.Println(" мир!")
	// Printf - для вставки переменных в текст вывода
	var output int32 = 10
	fmt.Printf("В 2020 году я %v раз выходил из дома, ", &output) 
}

Ввод данных

За ввод отвечает библиотека fmt, поэтому для работы необходимо подключить её в разделе import

func main() {
	fmt.Print("Введите число")
	var input float64
	// Scanf - даем пользователю возможность ввести число указанного типа
	fmt.Scanf("%f", &input)
	var input2 string
	// Scan - Помещение введенного занчения в переменную
	fmt.Scan(&input2)
}

Присвоение и сравнение

// присвоение
	var y
	y = 1
	var y1 int32 = 16
	// сравнение
	fmt.Print(y1 == 5)
	// присвоение с определнием
	x := 32

Условие Если (if)

Если сравнение одиночное, то скобки можно не ставить. Открывающая скобка остается на той же строке, что и условие

func main() {
	var PhoneModel
	fmt.Scan(&PhoneModel)

	if PhoneModel == "iPhone" {
		fmt.Println("Привет владелец яблока!")
	} else if PhoneModel == "Android"	{
		fmt.Println("Привет владелец робота!")
		}
		else {
			fmt.Println("Привет!")	
	}
}

Оператор множественного выбора switch

После найденного варианта оператор прекращает работу.

switch Code { 
	case "+7":
		fmt.Println("Russia")
	case "+3":
		fmt.Println("Ukrain")
	default:
		fmt.Println("не найдено")

Цикл Для (for)

Можно объявить только условие, остальное сделать внутри цикла.

func main() {
	var count = 100
// цикл работает пока каунт больше 0
	for count > 0 {
		fmt.Println(count)
		count = count - 1
	}
// увиличиваем каунт 10 раз
	for i := 0; i < 10; i++ {
		count += i
	}

}

Функции

При объявлении функций необходимо указывать тип входящих переменных и тип возвращаемых переменных.

package main

import "fmt"

/* Функция складывает два числа
x и y входные параметры, дробные числа
функция возвращает дробное число */
func Plus(x,y float64) float64 {
	var res
	res = x + y
	return res
}

func main() {
	// слогаемые
	var x float64 = 3.14
	var y float64 = 1.1
	
	// переменная для суммы
	var sum float64
	// применяем функцию и получаем результат
	sum = Plus(x,y)
	
	fmt.Println(sum)
}

Структуры

В Go нет привычных для ООП классов, но есть структуры. Технически можно использовать структуры для объявления класса и через них создавать новые объекты, но нужно следить за синтаксисом.

Структура — это когда мы объединяем несколько разнородных (или одинаковых) типов данных в одно целое и работаем с ним как с единым объектом. Почти как классы и объекты, только без классов и объектов.

package main

import "fmt"

type passport struct {
	series string
	number string
}

func main() {
	// создаём новый экземпляр структуры (объект)
	var x passport

	// второй способ создать структуру
	y := new(passport)
	
	// если мы знаем значения
	z := passport{1234,123456}
}

Методы

Методы в Go не встраиваются в структуры (классы) напрямую, а прописываются отдельно. Чтобы понять, какой метод к чему относится, в него добавляют ссылку на структуру, с которой этот метод будет работать.

package main

import (
	"fmt"
	"math"
)

type Circle struct {
	x float64
	y float64
	r float64 }
}
// метод для структуры, который вернёт площадь круга
// при объявлении метода обязательно указываем имя структуры, с которой метод работает
func (c *Circle) area() float64 {
	return math.Pi * c.r*c.r
}

func main() {
	// создаём новый круг
	c2 := Circle(10,20,5)
	// выводим площадь круга
	fmt.Println(c2.area())
}