GBH007

Go example

Nov 4th, 2021 (edited)
998
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 9.86 KB | None | 0 0
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6.     // Название := Значение
  7.     v := "1"
  8.  
  9.     // var Название = Значение
  10.     var v1 = "2"
  11.  
  12.     // var Название Тип = Значение
  13.     var v2 string = "3"
  14.  
  15.     // var Название Тип
  16.     var v3 string
  17.  
  18.     /*
  19.         Простые типы
  20.  
  21.         int - целое число
  22.         float64 - дробное число
  23.         string - текст (строка)
  24.         bool - логический тип (да/нет) (булка)
  25.     */
  26.  
  27.     fmt.Println(v, v1, v2, v3)
  28.  
  29.     // if Условие {Блок кода если условие истино}
  30.     if v == "1" {
  31.         fmt.Println(`v=="1"`)
  32.     }
  33.  
  34.     // if Условие (Тип bool) {Блок кода если условие истино} else {Блок кода если условие ложно}
  35.     if v1 == "1" {
  36.         fmt.Println(`v1=="1"`)
  37.     } else {
  38.         fmt.Println(`v1!="1"`)
  39.     }
  40.  
  41.     // switch Переменная (Имя) {}
  42.     switch v2 {
  43.     case "1": // case Значение: Код
  44.         fmt.Println(`v2=="1"`)
  45.     case "3":
  46.         fmt.Println(`v2=="3"`)
  47.     default:
  48.         fmt.Println(`v2??`)
  49.     }
  50.  
  51.     // switch {}
  52.     switch {
  53.     case v1 == "1": // case Условие (Тип bool): Код
  54.         fmt.Println(`v1=="1"`)
  55.     case v1 == "2":
  56.         fmt.Println(`v1=="2"`)
  57.     default:
  58.         fmt.Println(`v1??`)
  59.     }
  60.  
  61.     /*
  62.         Арифметические операции над числами (int float64)
  63.         a + b - складывает a и b
  64.         a - b - вычитает из a b
  65.         a * b - умножает a на b
  66.         a / b - делит a на b (если у обоих тип int то выполняет целочисленое деление)
  67.         a % b - остаток от деления a на b (только для типа int)
  68.        
  69.         Операции над строками
  70.         a + b - возвращает новыую строку в начале которой будет a которой будет дописана b
  71.         a * b - дублирует строку a b раз (только для a типа string b типа int)
  72.     */
  73.    
  74.     /*
  75.         Как получить bool
  76.  
  77.         МОЖНО ИСПОЛЬЗОВАТЬ ДЛЯ ЛЮБЫХ a и b ОДНОГО ТИПА
  78.         a == b - вернет истину если a равно b
  79.         a != b - вернет истину если a не равно b
  80.         a < b - вернет истину если a меньше b
  81.         a > b - вернет истину если a больше b
  82.         a <= b - вернет истину если a меньше или равно b
  83.         a >= b - вернет истину если a больше или равно b
  84.  
  85.         МОЖНО ИСПОЛЬЗОВАТЬ ДЛЯ a и b ТИПА bool
  86.         a || b - вернет истину если a или b истина, где a и b Могут быть только логическим типом (bool)
  87.         a && b - вернет истину если a и b истина, где a и b Могут быть только логическим типом (bool)
  88.     */
  89.  
  90.     /*
  91.         Сложные типы
  92.  
  93.         Массивы (срезы) и карты
  94.     */
  95.  
  96.     // Название := []Тип{}
  97.     sl := []int{}
  98.  
  99.     // Название := []Тип{Значения через запятую}
  100.     sl1 := []int{1, 6, 897}
  101.  
  102.     // Название := make([]Тип, Длина, Емкость)
  103.     /*
  104.         Чем длина отличается от емкости
  105.  
  106.         Длина это то сколько элеменетов есть сейчас в массиве
  107.         Емкость это то сколько можно положить элементов в массив по быстрому
  108.  
  109.         Емкость это необязательный параметр
  110.  
  111.         Этот формат объявления переменной использовать только когда тебе надо установить емкость
  112.     */
  113.     sl2 := make([]int, 0, 2)
  114.  
  115.     // Добавляем элемент в конец массива (УВЕЛИЧИВАЕТ ДЛИННУ)
  116.     // Переменная = append(Переменная, Значение)
  117.     sl = append(sl, 5)
  118.  
  119.     // Получение Значения по Индексу
  120.     // Пременная[Индекс]
  121.     // Индекс начинается с 0 и ВСЕГДА меньше длины массива
  122.     fmt.Println(sl[0])
  123.  
  124.     sl2 = append(sl2, sl1[2])
  125.  
  126.     fmt.Println(sl, sl1, sl2)
  127.  
  128.     // Переменная1 (Слайс) = Перменную2 (Слайс/Массив) [Индекс начала: Индекс конца НЕВКЛЮЧИТЕЛЬНО]
  129.     // Оба индекса опциональны
  130.     sl2 = sl1[1:3]
  131.     sl = sl1[:]
  132.     fmt.Println(sl, sl1, sl2)
  133.  
  134.     // Название := map[Тип ключа]Тип значения{}
  135.     mp := map[int]string{}
  136.  
  137.     // Название := make(map[Тип ключа(Простой тип или Структура)]Тип значения)
  138.     mp1 := make(map[int]string)
  139.  
  140.     // НЕ ИСПОЛЬЗУЙ
  141.     // var mp2 map[int]string
  142.  
  143.     mp[1] = "asdas"
  144.  
  145.     mpEx := map[string][]string{}
  146.  
  147.     mpEx["zuzu"] = append(mpEx["zuzu"], "Vasya")
  148.     mpEx["zuzu"] = append(mpEx["zuzu"], "Petyia")
  149.     mpEx["."] = append(mpEx["."], "Vodku")
  150.  
  151.     mpEx1 := map[string]bool{
  152.         "Vasy": false,
  153.         "Pety": true,
  154.     }
  155.  
  156.     isGood := mpEx1["Pety"]
  157.  
  158.     if isGood {
  159.         fmt.Println("Петя хороший")
  160.     } else {
  161.         fmt.Println("Петя плохой")
  162.     }
  163.  
  164.     fmt.Println(mp, mp1, mpEx)
  165.  
  166.     // Цикл по элементам Мапы/Массива/Слайса
  167.     // for Название ключа, Название значения := range Переменная{Код}
  168.     // Если это массив то ключ это индекс
  169.     for name, isGood := range mpEx1 {
  170.         if isGood {
  171.             fmt.Println(name, " хороший")
  172.         } else {
  173.             fmt.Println(name, " плохой")
  174.         }
  175.     }
  176.  
  177.     a, b, c := 1, "asda", false
  178.     /*
  179.         То же что и это
  180.         a := 1
  181.         b := "asda"
  182.         c := false
  183.     */
  184.     fmt.Println(a, b, c)
  185.  
  186.     // Цикл по изменению переменной
  187.     // for Название := Начальное значение; Название <= Конечное значение; Название ++ { Код }
  188.     // for Объявление переменной; Условие продолжение цикла; Действие в конце цикла {
  189.     for i := 0; i <= 10; i++ {
  190.         fmt.Println(i)
  191.     }
  192.  
  193.     // for Услование {Код}
  194.     // for {Код} ЭТО БЕСКОНЕЧНЫЙ ЦИКЛ
  195.     for len(sl) < 5 {
  196.         sl = append(sl, 0)
  197.     }
  198.     fmt.Println(sl)
  199.  
  200.     /*
  201.         Для циклов есть 2 команды
  202.  
  203.         continue - перейти на следующий шаг цикла (текущий после команды не будет выполнен)
  204.         break - завершить цикл (текущий после команды не будет выполнен)
  205.     */
  206.  
  207.     // вызов функции
  208.     test()
  209.  
  210.     hello()
  211.  
  212.     // вызов функции с аргументами
  213.     helloName("Snamer")
  214.  
  215.     fmt.Println(doubled(5))
  216.     fmt.Println(doubledDouble(5, 3.3))
  217.  
  218.     registration("Vasa", "Moscow", 33)
  219.     registration("Petu", "MurmAmisk", 12)
  220.  
  221.     // Создаем новый тип данных
  222.     // type Название типа struct{}
  223.     type MyType struct{}
  224.  
  225.     // Объявление переменный своего типа
  226.     // Название := Свой тип{}
  227.     // Объявление переменной с значением
  228.     mt := MyType{}
  229.  
  230.     // Объявление переменный своего типа
  231.     // Название := &Свой тип{}
  232.     // Объявление переменной со ССЫЛКОЙ на значением
  233.     mt1 := &MyType{}
  234.  
  235.     fmt.Println(mt, mt1)
  236.  
  237.     /*
  238.         Название := &Свой тип{
  239.             Поле1: Значение1,
  240.             Поле2: Значение2,
  241.         }
  242.     */
  243.     vasya := Employee{
  244.         Name:    "Vasya 1",
  245.         Work:    "Чистить унитиазы",
  246.         Exp:     10,
  247.         Age:     31,
  248.         Payment: 1.2,
  249.         // IsOff: false,
  250.     }
  251.  
  252.     fmt.Println(vasya.Age, vasya.Name)
  253.  
  254.     avtovaz := Zavod{Money: 5000}
  255.  
  256.     avtovaz.Staff = append(avtovaz.Staff, vasya)
  257.  
  258.     /*
  259.         \n - перенос строки
  260.         \t - табуляция (как нажать tab)
  261.         %s - вывод строки
  262.         %d - вывод целого числа
  263.         %f - вывод дробного числа
  264.         %+v - вывод структур
  265.     */
  266.  
  267.     fmt.Printf("%+v\n", avtovaz)
  268.  
  269.     // передача в функцию по значению
  270.     avtovaz = zarplataV1(avtovaz)
  271.  
  272.     fmt.Printf("%+v\n", avtovaz)
  273.  
  274.     // передача в функцию по ссылке
  275.     zarplataV2(&avtovaz)
  276.  
  277.     fmt.Printf("%+v\n", avtovaz)
  278.  
  279. }
  280.  
  281. func zarplataV1(z Zavod) Zavod {
  282.     for _, e := range z.Staff {
  283.         z.Money -= e.Payment
  284.     }
  285.     return z
  286. }
  287.  
  288. func zarplataV2(z *Zavod) {
  289.     for _, e := range z.Staff {
  290.         z.Money -= e.Payment
  291.     }
  292. }
  293.  
  294. // func Название(){Код}
  295. func test() {}
  296.  
  297. // func Название(){Код}
  298. func hello() {
  299.     fmt.Println("Hello")
  300. }
  301.  
  302. // func Название(Название аргумента Тип аргумента){Код}
  303. func helloName(name string) {
  304.     fmt.Println("Hello ", name)
  305. }
  306.  
  307. // func Название(Название аргумента Тип аргумента) Тип возвращаемого значения {Код}
  308. func doubled(a int) int {
  309.     return a * 2
  310. }
  311.  
  312. // func Название(Название аргумента Тип аргумента) (Тип возвращаемого значения через запятую) {Код}
  313. func doubledDouble(a int, b float64) (int, float64) {
  314.     return a * 2, b * 2
  315. }
  316.  
  317. func registration(name, city string, age int) bool {
  318.     if age > 18 {
  319.         fmt.Printf("Пользователь %s зарегистрирован в городе %s\n", name, city)
  320.         return true
  321.     }
  322.     return false
  323. }
  324.  
  325. type Zavod struct {
  326.     Staff []Employee
  327.     Money float64
  328. }
  329.  
  330. type Employee struct {
  331.     Name    string // Навзание поля Тип поля
  332.     Work    string
  333.     Exp     int
  334.     Age     int
  335.     Payment float64
  336.     IsOff   bool
  337. }
  338.  
Add Comment
Please, Sign In to add comment