Go за Прикладом: Форматування Рядків

Work in Progress / Сайт в процесі розробки

Go пропонує відмінну підтримку для формутування рядків традиційним для багатьох - printf шляхом. Нижче ми розглянемо часто вживані приклади форматування рядків в Go.

package main
import "fmt"
import "os"
type point struct {
    x, y int
}
func main() {

Go пропонує кілька друкуючих “дієслів” розроблених для фомратування значень Go. Наприклад, %v дозволяє сформатувати та надрукувати примірник нашої структури 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)

Форматування логічного типу даних (bool) простіше-простого.

    fmt.Printf("%t\n", true)

Існує багато варіцій форматування для цілих чисел. Використання %d призведе до стандартного, десятичного форматування.

    fmt.Printf("%d\n", 123)

Відображення у двійковій системі числення.

    fmt.Printf("%b\n", 14)

Код %c надрукує відповідний числу символ.

    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", "\"рядок\"")

Для подвійної екранізацій рядків скористайтесь %q.

    fmt.Printf("%q\n", "\"рядок\"")

Так само, як і з чілими числами, %x трансформує рядок у шістнадцятирічне відображення, з друком двох символів на байт вхідного параметру.

    fmt.Printf("%x\n", "шістнадцятирюй")

Щоб надрукувати адресу пам’яті вказівника (саме так буде відображено вказівник) використайте %p.

    fmt.Printf("%p\n", &p)

Коли форматуєте строки вам часто потрібно буде контролювати точність та довжину фінального числа. Щоб вказати довжину цілого числа, скористайтесь ичслом після символа % у дієслові. За стандартними налаштуваннями результатом буде вирівняне по правій стороні і видбите пробілами число.

    fmt.Printf("|%6d|%6d|\n", 12, 345)

You can also specify the width of printed floats, though usually you’ll also want to restrict the decimal precision at the same time with the width.precision syntax.

    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("це %s", "рядок")
    fmt.Println(s)

Ви можете сформатувати+надрукувати до io.Writers напротивагу os.Stdout використовуючи Fprintf.

    fmt.Fprintf(os.Stderr, "ой %s\n", "халепа")
}
$ go run string-formatting.go
{1 2}
{x:1 y:2}
main.point{x:1, y:2}
main.point
true
123
1110
!
1c8
78.900000
1.234000e+08
1.234000E+08
"рядок"
"\"рядок\""
d188d196d181d182d0bdd0b0d0b4d186d18fd182d0b8d180d18ed0b9
0xc4200160c0
|    12|   345|
|  1.20|  3.45|
|1.20  |3.45  |
|   foo|     b|
|foo   |b     |
це рядок
ой халепа

Наступний приклад: Регулярні вирази.