diff --git a/readme.md b/readme.md index 2ce29e5..0221f23 100644 --- a/readme.md +++ b/readme.md @@ -34,3 +34,4 @@ * [7.2. Облачные провайдеры и синтаксис Terraform](/src/homework/07-terraform/7.2) * [7.3. Основы и принцип работы Terraform](/src/homework/07-terraform/7.3) * [7.4. Средства командной работы над инфраструктурой](/src/homework/07-terraform/7.4) +* [7.5. Основы golang](/src/homework/07-terraform/7.5) diff --git a/src/homework/07-terraform/7.5/golang/go.mod b/src/homework/07-terraform/7.5/golang/go.mod new file mode 100644 index 0000000..6967dfd --- /dev/null +++ b/src/homework/07-terraform/7.5/golang/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.18 diff --git a/src/homework/07-terraform/7.5/golang/main.go b/src/homework/07-terraform/7.5/golang/main.go new file mode 100644 index 0000000..ea451dd --- /dev/null +++ b/src/homework/07-terraform/7.5/golang/main.go @@ -0,0 +1,28 @@ +package main + +import ( + "fmt" + + "main/tasks" +) + +func main() { + var taskNum int + fmt.Println("Enter number of task") + fmt.Scan(&taskNum) + + switch taskNum { + case 1: + tasks.MetersToFeet() + break + case 2: + tasks.MinElement() + break + case 3: + tasks.DivThree() + break + default: + fmt.Println("Unknown task") + break + } +} diff --git a/src/homework/07-terraform/7.5/golang/tasks/div_three.go b/src/homework/07-terraform/7.5/golang/tasks/div_three.go new file mode 100644 index 0000000..2414da3 --- /dev/null +++ b/src/homework/07-terraform/7.5/golang/tasks/div_three.go @@ -0,0 +1,12 @@ +package tasks + +import "fmt" + +func DivThree() { + fmt.Println("Numbers that are divisible by 3:") + for i := 1; i <= 100; i++ { + if i%3 == 0 { + fmt.Printf("%d, ", i) + } + } +} diff --git a/src/homework/07-terraform/7.5/golang/tasks/meters_to_feet.go b/src/homework/07-terraform/7.5/golang/tasks/meters_to_feet.go new file mode 100644 index 0000000..b8b3211 --- /dev/null +++ b/src/homework/07-terraform/7.5/golang/tasks/meters_to_feet.go @@ -0,0 +1,17 @@ +package tasks + +import "fmt" + +const metersInFeet float32 = 0.3048 + +func MetersToFeet() { + var meters int + + fmt.Println("Please, input value in meters:") + fmt.Scan(&meters) + fmt.Printf("%f", convert(meters)) +} + +func convert(meters int) float32 { + return float32(meters) / metersInFeet +} diff --git a/src/homework/07-terraform/7.5/golang/tasks/meters_to_feet_test.go b/src/homework/07-terraform/7.5/golang/tasks/meters_to_feet_test.go new file mode 100644 index 0000000..9b49510 --- /dev/null +++ b/src/homework/07-terraform/7.5/golang/tasks/meters_to_feet_test.go @@ -0,0 +1,16 @@ +package tasks + +import ( + "testing" +) + +func TestConvert(t *testing.T) { + meters := 3048 + var expectedResult float32 = 10000.0 + + result := convert(meters) + + if result != expectedResult { + t.Fatalf("convert result is %f, expected %f", result, expectedResult) + } +} diff --git a/src/homework/07-terraform/7.5/golang/tasks/min_element.go b/src/homework/07-terraform/7.5/golang/tasks/min_element.go new file mode 100644 index 0000000..e75c889 --- /dev/null +++ b/src/homework/07-terraform/7.5/golang/tasks/min_element.go @@ -0,0 +1,23 @@ +package tasks + +import "fmt" + +func MinElement() { + x := []int{48, 96, 86, 68, 57, 82, 63, 70, 37, 34, 83, 27, 19, 97, 9, 17} + + fmt.Printf("Min element is %d\n", minElem(x)) +} + +func minElem(list []int) int { + min := list[0] + + for i := 1; i < len(list); i++ { + current := list[i] + + if current < min { + min = current + } + } + + return min +} diff --git a/src/homework/07-terraform/7.5/golang/tasks/min_element_test.go b/src/homework/07-terraform/7.5/golang/tasks/min_element_test.go new file mode 100644 index 0000000..23e9a96 --- /dev/null +++ b/src/homework/07-terraform/7.5/golang/tasks/min_element_test.go @@ -0,0 +1,15 @@ +package tasks + +import ( + "testing" +) + +func MinElemTest(t *testing.T) { + list := []int{1, 2, 3, 4} + expectedResult := 1 + actualResult := minElem(list) + + if expectedResult != actualResult { + t.Fatalf("minElem result is %d, expected %d", actualResult, expectedResult) + } +} diff --git a/src/homework/07-terraform/7.5/gotour.png b/src/homework/07-terraform/7.5/gotour.png new file mode 100644 index 0000000..6e96d5d Binary files /dev/null and b/src/homework/07-terraform/7.5/gotour.png differ diff --git a/src/homework/07-terraform/7.5/readme.md b/src/homework/07-terraform/7.5/readme.md new file mode 100644 index 0000000..fde8dd0 --- /dev/null +++ b/src/homework/07-terraform/7.5/readme.md @@ -0,0 +1,93 @@ +Выполнение [домашнего задания](https://github.com/netology-code/virt-homeworks/blob/master/07-terraform-05-golang/README.md) +по теме "7.5. Основы golang". + +## Q/A + +### Задание 1 + +> Установите golang +> +> 1. Воспользуйтесь инструкций с официального сайта: [https://golang.org/](https://golang.org/). +> 2. Так же для тестирования кода можно использовать песочницу: [https://play.golang.org/](https://play.golang.org/). + +```shell +go version +go version go1.18.3 linux/amd64 +``` + +### Задание 2 + +> Знакомство с gotour. +> +> У Golang есть обучающая интерактивная консоль [https://tour.golang.org/](https://tour.golang.org/). +> Рекомендуется изучить максимальное количество примеров. В консоли уже написан необходимый код, +> осталось только с ним ознакомиться и поэкспериментировать как написано в инструкции в левой части экрана. + +![gotour](./gotour.png) + +### Задание 3 + +> Написание кода +> +> Цель этого задания закрепить знания о базовом синтаксисе языка. Можно использовать редактор кода +> на своем компьютере, либо использовать песочницу: [https://play.golang.org/](https://play.golang.org/). +> +> 1. Напишите программу для перевода метров в футы (1 фут = 0.3048 метр). Можно запросить исходные данные +> у пользователя, а можно статически задать в коде. +> Для взаимодействия с пользователем можно использовать функцию `Scanf`: +> ```go +> package main +> +> import "fmt" +> +> func main() { +> fmt.Print("Enter a number: ") +> var input float64 +> fmt.Scanf("%f", &input) +> +> output := input * 2 +> +> fmt.Println(output) +> } +> ``` +> +> 1. Напишите программу, которая найдет наименьший элемент в любом заданном списке, например: +> ``` +> x := []int{48,96,86,68,57,82,63,70,37,34,83,27,19,97,9,17,} +> ``` +> 1. Напишите программу, которая выводит числа от 1 до 100, которые делятся на 3. То есть `(3, 6, 9, …)`. +> +> В виде решения ссылку на код или сам код. + +1. Программа для перевода метров в футы: [meters_to_feet.go](./golang/tasks/meters_to_feet.go). +2. Программа для нахождения наименьшего элемента в списке: [min_element.go](./golang/tasks/min_element.go) +3. Программа для вывода чисел, которые деляться на 3: [div_three.go](./golang/tasks/div_three.go) + +Для запуска программ нужно проделать следующие шаги: + +1. Перейти в директорию [golang](./golang/) + ```shell + cd golang + ``` +1. Запустить программу: + ```shell + go run main.go + ``` +1. Ввести в консоль число от 1 до 3, в зависимости от необходимой программы + +### Задание 4 + +> Протестировать код +> +> Создайте тесты для функций из предыдущего задания. + +Написал тесты для [программы 1: meters_to_feet](./golang/tasks/meters_to_feet_test.go) и [программы 2: min_element](./golang/tasks/min_element_test.go). + +Запуск тестов: + +```shell +cd golang/tasks +go test +PASS +ok main/tasks 0.003s +```