Форматированный вывод

Ряд возможностей для вывода и не только предоставляет пакет fmt. До этого мы использовали только Print и Println. Однако, бывают ситуации, когда нам понадобится вывести, допустим у числа float64 только 2 знака после запятой. Подобные операции удобно делать через функцию Printf:

package main
import (
    "fmt"
    "math"
)


func main() {
    fmt.Println(math.Pi)
    fmt.Printf("%.2f", math.Pi)
}

Для чисел с плавающей точкой можно указать точность или количество символов в дробной части. Для этого количество символов указывается после точки: %.2f означает, что выведутся только две цифры после точки. Существуют и другие варианты форматирования чисел с плавающей точкой:

  • %f: точность и ширина значения по умолчанию
  • %5f: ширина - 5 символов и точность по умолчанию
  • %.2f: ширина по умолчанию и точность - 2 символа
  • %5.2f: ширина - 5, точность - 2
  • %5.f: ширина - 5, точность - 0

%f - один из многих спейификаторов форматирования. Существуют множество других спецификаторов, каждый из которых представляет набор символов, которые интерпретируются определенным образом и обозначаются занком процента %. Примеры спецификаторова следующие:

  • %t: для вывода значений типа bool (true или false)
  • %b: для вывода целых чисел в двоичной системе
  • %c: для вывода символов, представленных числовым кодом
  • %d: для вывода целых чисел в десятичной системе (int)
  • %o: для вывода целых чисел в восьмеричной системе
  • %q: для вывода символов в одинарных кавычках
  • %x: для вывода целых чисел в шестнадцатиричной системе, буквенные символы числа имеют нижний регистр a-f
  • %X: для вывода целых чисел в шестнадцатиричной системе, буквенные символы числа имеют верхний регистр A-F
  • %U: для вывода символов в формате кодов Unicode, например, U+1234
  • %e: для вывода чисел с плавающей точкой в экспоненциальном представлении, например, -1.234456e+78
  • %E: для вывода чисел с плавающей точкой в экспоненциальном представлении, например, -1.234456E+78
  • %f: для вывода чисел с плавающей точкой, например, 123.456
  • %F: аналог %f
  • %s: для вывода строки
  • %p: дла вывода значения укзателя (шестнадцатиричного адреса)

Существет и универсальный спецификатор %v, который для типа bool аналогичен %t, для целочисленных типов - %d, для чисел с плавающей точной - %g, для строк - %s.

Примеры использования:

package main
import "fmt"


func main() {
    var BigNumInt int64 = 100500
    var BigNumFloat float64 = 100500.100500
    var word string = "word"

    fmt.Printf("This is a big num integer: %d\n", BigNumInt)
    fmt.Printf("This is a cut version of big num float: %.2f\n", BigNumFloat)
    fmt.Printf("This is just a word: %s", word)
}