gobyexample/examples/string-formatting/string-formatting.go
2019-10-09 16:35:15 +03:00

109 lines
4.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Go предлагает отличную поддержку форматирования строк
// с помощью `printf`. Вот несколько примеров типичных
// задач форматирования строк.
package main
import (
"fmt"
"os"
)
type point struct {
x, y int
}
func main() {
// Go предлагает несколько “глаголов” созданных для
// форматирования общих Go значений. Например,
// это выведет инстанс нашей `point` структуры.
p := point{1, 2}
fmt.Printf("%v\n", p)
// Если значение является структурой, запись `%+v`
// выведет названия полей структуры.
fmt.Printf("%+v\n", p)
// Вариант `%#v` печатает синтаксическое представление
// Go, то есть фрагмент исходного кода, который будет
// генерировать это значение.
fmt.Printf("%#v\n", p)
// Для вывода типа значения, используйте `%T`.
fmt.Printf("%T\n", p)
// Форматирование логических значений не вызывает затруднений.
fmt.Printf("%t\n", true)
// Возможно большое количество опций для форматирования
// целых чисел. Используйте `%d` для стандартного,
// десятеричного вывода.
fmt.Printf("%d\n", 123)
// Бинарный вывод
fmt.Printf("%b\n", 14)
// Вывод символа, соответсвующего заданному числу.
fmt.Printf("%c\n", 33)
// `%x` - шестнадцатиричное значение.
fmt.Printf("%x\n", 456)
// Так же есть несколько вариантов форматирования
// чисел с плавающей точкой. Стандартный вывод `%f`.
fmt.Printf("%f\n", 78.9)
// `%e` и `%E` приводит числло с плавающей точкой
// к экспоненциальному представлению.
fmt.Printf("%e\n", 123400000.0)
fmt.Printf("%E\n", 123400000.0)
// Для стандартного вывода строк используйте `%s`.
fmt.Printf("%s\n", "\"string\"")
// Для двойных ковычек как в исходниках Go, используйте `%q`.
fmt.Printf("%q\n", "\"string\"")
// Так же как и с целочисленными ранее, `%x` отображает
// строку в виде шестнадцатеричного исчисления, с двумя
// символами вывода за каждый байт ввода.
fmt.Printf("%x\n", "hex this")
// Чтобы вывести ссылку на указатель, используйте `%p`.
fmt.Printf("%p\n", &p)
// При форматировании чисел вам часто захочется
// контролировать ширину и точность получаемого значения.
// Чтобы указать ширину целого числа, используйте
// число после `%`. По-умолчанию результат будет
// выровнен по правому краю и дополнен пробелами.
fmt.Printf("|%6d|%6d|\n", 12, 345)
// Вы также можете указать ширину чисел с плавающей точкой,
// также вы можете ограничить десятичную точность
// одновременно с помощью синтаксиса `ширина.точность`.
fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)
// Для выравнивания по левому краю используйте флаг `-`.
fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)
// Вы также можете контролировать ширину при форматировании
// строк, особенно для обеспечения их выравнивания в табличном
// выводе. Стандартное выравнивание по правому краю.
fmt.Printf("|%6s|%6s|\n", "foo", "b")
// Для выравнивания по левому краю используйте флаг `-`.
fmt.Printf("|%-6s|%-6s|\n", "foo", "b")
// До сих пор мы видели `Printf`, который печатает
// отформатированную строку в `os.Stdout`. `Sprintf`
// форматирует и возвращает строку, нигде не печатая.
s := fmt.Sprintf("a %s", "string")
fmt.Println(s)
// Вы можете отформатировать+вывести в `io.Writers`, используя
// `Fprintf`.
fmt.Fprintf(os.Stderr, "an %s\n", "error")
}