Глагол форматирования %v

Глагол форматирования %v в пакете fmt выводит значение переменной в формате, который подходит для этого типа по умолчанию. Это универсальный глагол, который работает с любыми типами данных: строками, числами, слайсами, структурами и другими. Он используется в функциях fmt.Printf, fmt.Sprintf и подобных.

Для пользовательских типов глагол %v вызывает метод String, если он определен. Это позволяет управлять выводом своих структур.

Синтаксис

gofmt.Printf("%v", value)

Пример с числами

Давайте выведем целые числа с помощью глагола %v:

gopackage main

import "fmt"

func main() {
  num := 42
  fmt.Printf("%v\n", num)

  negative := -10
  fmt.Printf("%v\n", negative)
}

Результат выполнения кода:

go42
-10

Пример со строками

Глагол %v выводит строки без изменений:

gopackage main

import "fmt"

func main() {
  str := "abcde"
  fmt.Printf("%v\n", str)

  empty := ""
  fmt.Printf("%v\n", empty)
}

Результат выполнения кода:

goabcde

Пример со слайсами

Слайсы выводятся в квадратных скобках с элементами через пробел:

gopackage main

import "fmt"

func main() {
  numbers := []int{1, 2, 3, 4, 5}
  fmt.Printf("%v\n", numbers)

  letters := []string{"a", "b", "c", "d", "e"}
  fmt.Printf("%v\n", letters)
}

Результат выполнения кода:

go[1 2 3 4 5]
[a b c d e]

Пример со структурами

Структуры выводятся в фигурных скобках с именами полей и их значениями:

gopackage main

import "fmt"

type Person struct {
  Name string
  Age  int
}

func main() {
  person := Person{Name: "John", Age: 30}
  fmt.Printf("%v\n", person)
}

Результат выполнения кода:

go{John 30}

Пример с пользовательским типом

Для пользовательских типов можно переопределить вывод через метод String:

gopackage main

import "fmt"

type Point struct {
  X, Y int
}

func (p Point) String() string {
  return fmt.Sprintf("Point(%d, %d)", p.X, p.Y)
}

func main() {
  p := Point{X: 5, Y: 10}
  fmt.Printf("%v\n", p)
}

Результат выполнения кода:

goPoint(5, 10)

Пример с разными типами

Глагол %v адаптируется под каждый тип:

gopackage main

import "fmt"

func main() {
  integer := 123
  text := "hello"
  boolean := true
  floatNum := 3.14

  fmt.Printf("%v\n", integer)
  fmt.Printf("%v\n", text)
  fmt.Printf("%v\n", boolean)
  fmt.Printf("%v\n", floatNum)
}

Результат выполнения кода:

go123
hello
true
3.14

Смотрите также

  • глагол %+v,
    который выводит структуры с именами полей
  • глагол %#v,
    который выводит представление в синтаксисе Go
  • функцию fmt.Printf,
    которая форматирует и выводит строку
  • функцию fmt.Sprintf,
    которая возвращает отформатированную строку