Изучаем пакет Go fmt

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!

Оригинал статьи
Опубликовано 2 сентября 2024 в 22:04
Обновлено 22 сентября 2024 в 12:56
Категория: Блог
Теги: