12. Golang - чтение данных и указатели
Содержание
Получение данных с клавиуатуры
Вчера (Днем 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)
}
Ниже выполняется этот код.
Ресурсы
- Введение в Golang
- StackOverflow 2021 Developer Survey
- Why we are choosing Golang to learn
- Jake Wright - Learn Go in 12 minutes
- Techworld with Nana - Golang full course - 3 hours 24 mins
- NOT FREE Nigel Poulton Pluralsight - Go Fundamentals - 3 hours 26 mins
- FreeCodeCamp - Learn Go Programming - Golang Tutorial for Beginners
- Hitesh Choudhary - Complete playlist
Увидимся завтра.