fmt
— один из основных пакетов языка программирования Go и основном он используется для вывода информации в терминал. У пакета fmt есть и более широкое назначение — он помогает нам форматировать данные, поэтому его иногда называют пакетом формата.
Функции в пакете Go fmt
Пакет состоит из трех наборов функций, основанных на их использовании. Функции, используемые для форматирования и вывода данных на печать различными способами и в различных случаях:
Println()
Print()
Printf()
Функции, которые только форматируют данные и ничего не выводят
Sprint()
Sprintln()
Sprintf()
И функция для чтения пользовательского ввода с терминала
Scan()
Функции, используемые для форматирования и вывода данных различными способами и в различных случаях
Пакет Go fmt
предоставляет две тесно связанные функции для форматирования строки, выводимой в терминал.
.Print()
Если аргументы являются строками, он объединяет их без интервалов и выводит результат в консоль.
fmt.Print("My", "name", "is", "Lukman")
// Выведет: MynameisLukman
Если ни один из аргументов не является строкой, функция Print
добавляет между ними пробелы.
fmt.Print(10, 20)
// 10 20
.Println()
Наоборот, всегда добавляет пробел между аргументами и добавляет новую строку или перенос строки в конце.
fmt.Println("My", "name", "is", "Lukman")
fmt.Println("new", "line")
// My name is Lukman
// new line
.Printf()
Функция Go Printf()
в fmt
обеспечивает пользовательское форматирование строки с помощью одного или нескольких параметров. Параметр — это место для именованного значения (константы или переменной), которое должно быть отформатировано в соответствии с этими условиями:
%v
представляет именованное значение в формате по умолчанию%d
предполагает, что именованное значение будет целочисленного типа%f
означает, что именованная величина имеет тип float%T
представляет тип для именованного значения
Но в отличие от .Println()
и .Printf()
не добавляет новую строку к отформатированной строке.
name := "Lukman"
fmt.Printf("My name is %v", name)
// My name is Lukman
age := 90
fmt.Printf("I am %d years old", age)
// I am 90 years old
Функции, которые только форматируют данные и ничего не выводят
В отличие от функций .Print()
и .Println()
, пакет fmt
предоставляет другие функции, которые не выводят строки, а форматируют их: fmt.Sprint()
и fmt.Sprintln()
.
fmt.Sprint()
user := "Kenny"
Feedback := "Nice book!"
userFeedback := fmt.Sprint(user, "feedback on your book is", feedback)
fmt.Print(userFeedback)
// Вывод: Kenny feedback on your book is Nice book!
Присмотритесь к userFeedback
, и вы увидите, что вызов fmt.Sprint()
ничего не выводит. Скорее, он возвращает значение, которое мы храним в userFeedback
. Когда возвращается значение, это означает, что функция выполнила какие-то вычисления и возвращает вычисленное значение. После этого мы можем использовать возвращенное значение для дальнейшего использования. Мы отформатировали одну строку, соединив четыре отдельные строки. Чтобы увидеть значение userFeedback
, мы должны использовать оператор print
.
fmt.Sprintln()
fmt.Sprintln()
работает так же, как fmt.Sprint()
, но автоматически включает пробелы между аргументами (так же, как fmt.Println()
и fmt.Print()
):
quote = fmt.Sprintln("see here,", "no spaces!")
fmt.Print(quote)
// Prints: see here, no spaces!
Несмотря на то что мы не добавили пробел в конце фразы «see here» или пробел в начале фразы «no spaces!», цитата конкатенируется с пробелом между ними: «see here, no spaces!».
fmt.Sprintf()
Когда нам нужно интерполировать строку, без её вывода, мы можем использовать fmt.Sprintf()
.
Как и fmt.Printf()
, fmt.Sprintf()
также может использовать параметры:
user := "userA"
winner := fmt.Sprintf("The winner is… %v!", user)
fmt.Print(answer)
// Вывод: The winner is is… userA!
fmt.Sprintf()
работает аналогично fmt.Printf()
, главное отличие в том, что fmt.Sprintf()
возвращает свое значение, а не выводит его!
Функция чтения пользовательского ввода
Функция Go fmt.Scan()
сканирует пользовательский ввод с терминала и извлекает текст, разделенный пробелами, в последовательные аргументы. Новая строка считается пробелом. Эта функция ожидает передачи адреса каждого аргумента.
package main
import "fmt"
func main() {
var name string
var age int
fmt.Println("What's your name?")
fmt.Scan(&name)
fmt.Println("and what's your age?")
fmt.Scan(&age)
fmt.Printf("%v is %d years old!", name, age)
}
//$ What's your name?
//$ Lukman
//$ now what's your age?
//$ 90
//$ Lukman is 90 years old!
Мы рассмотрели семь функций, открываемых пакетом Go fmt
, и теперь вы можете полностью использовать пакет fmt
в своих Go-приложениях.
Теперь пришло время использовать всю мощь Go, желаю вам отличных проектов на Go!