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())
}
