Я хочу увидеть значения в срезе. Как их распечатать?
projects []Project
Я хочу увидеть значения в срезе. Как их распечатать?
projects []Project
Ответы:
Вы можете попробовать %v
, %+v
или %#v
глаголы go fmt :
fmt.Printf("%v", projects)
Если ваш массив (или здесь срез ) содержит struct
(например Project
), вы увидите их детали.
Для большей точности вы можете использовать %#v
для печати объекта с использованием синтаксиса Go, как для литерала:
%v the value in a default format.
when printing structs, the plus flag (%+v) adds field names
%#v a Go-syntax representation of the value
Для основных типов этого fmt.Println(projects)
достаточно.
Примечание: для части указателей, то есть []*Project
(вместо []Project
), вам лучше определить String()
метод, чтобы отображать именно то, что вы хотите видеть (или вы увидите только адрес указателя).
См. Этот пример play.golang .
Для a []string
вы можете использовать strings.Join()
:
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
// output: foo, bar, baz
Я предпочитаю fmt.Printf("%+q", arr)
печатать
["some" "values" "list"]
Если вы просто хотите увидеть значения массива без скобок, вы можете использовать комбинацию fmt.Sprint()
иstrings.Trim()
a := []string{"a", "b"}
fmt.Print(strings.Trim(fmt.Sprint(a), "[]"))
fmt.Print(a)
Возврат:
a b
[a b]
Имейте в виду, что с этим решением любые ведущие скобки будут потеряны из первого значения, а любые конечные скобки будут потеряны из последнего значения.
a := []string{"[a]", "[b]"}
fmt.Print(strings.Trim(fmt.Sprint(a), "[]")
fmt.Print(a)
Возврат:
a] [b
[[a] [b]]
Для получения дополнительной информации см. Документацию для strings.Trim ()
fmt.Printf()
это нормально, но иногда мне нравится использовать красивый пакет для печати .
import "github.com/kr/pretty"
pretty.Print(...)
Если вы хотите просмотреть информацию в срезе в том же формате, который вы использовали бы для ее ввода (что-то вроде ["one", "two", "three"]
), вот пример кода, показывающий, как это сделать:
package main
import (
"fmt"
"strings"
)
func main() {
test := []string{"one", "two", "three"} // The slice of data
semiformat := fmt.Sprintf("%q\n", test) // Turn the slice into a string that looks like ["one" "two" "three"]
tokens := strings.Split(semiformat, " ") // Split this string by spaces
fmt.Printf(strings.Join(tokens, ", ")) // Join the Slice together (that was split by spaces) with commas
}
Я написал пакет под названием Pretty Slice. Вы можете использовать его для визуализации срезов, их вспомогательных массивов и т. Д.
package main
import pretty "github.com/inancgumus/prettyslice"
func main() {
nums := []int{1, 9, 5, 6, 4, 8}
odds := nums[:3]
evens := nums[3:]
nums[1], nums[3] = 9, 6
pretty.Show("nums", nums)
pretty.Show("odds : nums[:3]", odds)
pretty.Show("evens: nums[3:]", evens)
}
Этот код будет производить и выводить как этот:
Подробнее читайте: https://github.com/inancgumus/prettyslice.
fmt.Println(projects)
?