12. Golang - чтение данных и указатели

Обновлено: 2024-03-12
4 мин

Получение данных с клавиуатуры

Вчера (Днем 11-м) мы создали нашу первую программу Go, и данные, которые мы хотели получить от пользователя, были созданы как переменные в нашем коде. Теперь мы хотим спросить пользователя данные для ввода, чтобы дать переменной значение для конечного сообщения.

Получение пользовательских данных

Прежде чем мы это сделаем, давайте еще раз взглянем на наше приложение и пройдемся по переменным, которые нам нужны в качестве теста, прежде чем получить этот пользовательский ввод.

Давайте теперь добавим новую переменную с именем TwitterName, вы можете найти этот новый код ниже, и если мы запустим этот код, это будет наш вывод.

package main

import "fmt"

func main() {
 
 challenge := "#90DaysOfDevOps"
 const daystotal = 90

 fmt.Printf("Welcome to %v\n", challenge)
 fmt.Printf("This is a %v challenge\n", daystotal)

 var TwitterName string
 var DaysComplete int
 // ask user for their twitter handle

 TwitterName = "@MichaelCade1"
 DaysComplete = 12
 fmt.Printf("%v has completed %v days of the challenge\n", TwitterName, DaysComplete)
 fmt.Println("Great work")
}

Прежде чем мы это сделаем, давайте еще раз взглянем на наше приложение и пройдемся по переменным, которые нам нужны в качестве теста, прежде чем получить этот пользовательский ввод.

Вчера мы закончили с нашим кодом, выглядящим так:

package main

import "fmt"

func main() {
 var challenge = "#90DaysOfDevOps"
 const daystotal = 90
 var dayscomplete = 11

 fmt.Printf("Welcome to %v\n", challenge)
 fmt.Printf("This is a %v challenge and you have completed %v days\n", daystotal, dayscomplete)
 fmt.Println("Great work")
}

Мы вручную определили в коде наши переменные и константы challenge, daystotal, dayscomplete.

Давайте теперь добавим новую переменную с именем TwitterName

У нас 12-й день, и нам нужно было бы менять dayscomplete каждый день и компилировать наш код каждый день, если бы он был жестко запрограммирован, что звучит не так уж здорово.

Получая пользовательский ввод, мы хотим получить значение, возможно, имя и количество завершенных дней. Для этого мы можем использовать другую функцию из пакета fmt.

Кратко о пакете fmt, различные функции для: форматированного ввода и вывода (I/O) (input and output)

  • Печать сообщений
  • Собирать пользовательский ввод
  • Записать в файл

Это вместо того, чтобы присваивать значение переменной, мы хотим попросить пользователя ввести его.

fmt.Scan(&TwitterName)

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

В нашем коде вы можете видеть, что мы просим пользователя ввести две переменные, TwitterName и DaysCompleted

package main

import "fmt"

func main() {

 const DaysTotal int = 90
 challenge := "#90DaysOfDevOps"

 fmt.Printf("Welcome to the %v challenge.\nThis challenge consists of %v days\n", challenge, DaysTotal)

 var TwitterName string
 var DaysCompleted uint

 // asking for user input
 fmt.Println("Enter Your Twitter Handle: ")
 fmt.Scanln(&TwitterName)

 fmt.Println("How many days have you completed?: ")
 fmt.Scanln(&DaysCompleted)

 fmt.Printf("Thank you %v for taking part and completing %v days.\n", TwitterName, DaysCompleted)
 fmt.Println("Good luck")
}

Давайте теперь запустим нашу программу, и вы увидите, что у нас есть входные данные для обоих вышеперечисленных.

Хорошо, мы получили некоторый пользовательский ввод и напечатали сообщение, но как насчет того, чтобы заставить нашу программу сообщать нам, сколько дней у нас осталось в нашей задаче.

Для этого мы создали переменную с именем remainingDays, и мы жестко оценили ее в нашем коде как 90. Затем нам нужно изменить значение этого значения, чтобы распечатать remainingDays, когда мы получим пользовательский ввод DaysCompleted мы можем сделать это с помощью этого простого изменения переменной.

remainingDays = remainingDays - DaysCompleted

Наша программа теперь выглядит вот так:

package main

import "fmt"

func main() {

 const DaysTotal int = 90
 var remainingDays uint = 90
 challenge := "#90DaysOfDevOps"

 fmt.Printf("Welcome to the %v challenge.\nThis challenge consists of %v days\n", challenge, DaysTotal)

 var TwitterName string
 var DaysCompleted uint

 // asking for user input
 fmt.Println("Enter Your Twitter Handle: ")
 fmt.Scanln(&TwitterName)

 fmt.Println("How many days have you completed?: ")
 fmt.Scanln(&DaysCompleted)

 // calculate remaining days
 remainingDays = remainingDays - DaysCompleted

 fmt.Printf("Thank you %v for taking part and completing %v days.\n", TwitterName, DaysCompleted)
 fmt.Printf("You have %v days remaining for the %v challenge\n", remainingDays, challenge)
 fmt.Println("Good luck")
}

Если мы теперь запустим эту программу, вы увидите, что простой расчет выполняется на основе пользовательского ввода и значения remainingDays

Что такое указатель? (Специальные переменные)

Указатель — это (специальная) переменная, которая указывает на адрес памяти другой переменной.

Отличное объяснение этого можно найти здесь geeksforgeeks

package main

import "fmt"

func main() {
 var challenge = "#90DaysOfDevOps"

 fmt.Println(challenge)
 fmt.Println(&challenge)

}

Ниже выполняется этот код.

Ресурсы

Увидимся завтра.