Как распечатать значения срезов

103

Я хочу увидеть значения в срезе. Как их распечатать?

projects []Project  
fnr
источник
10
кроме того fmt.Println(projects)?
Not_a_Golfer
4
Также: [] Projects - это фрагмент, а не массив: golang.org/blog/go-slices-usage-and-internals
elithrar
Почему вы все дали мне -1?
пн
2
@fnr извините, но рецензенты, вероятно, посчитали, что вопрос был легко решен документом. Я обновил свой ответ, чтобы показать, что это не всегда так очевидно. Вы можете оставить свой вопрос, он верный.
VonC
2
@fnr - -1 на этом сайте означает вопрос: «не показывает исследовательских усилий; это неясно или бесполезно». Итак, я вижу, вы пометили свой вопрос «перейти» и «массивы» и хотите знать, «как их распечатать». Если я захожу на Google.com и ищу «массивы руководств по языку программирования», я нахожу ряд ресурсов, включая этот, который, похоже, может помочь. Так что, если это действительно помогает, это показывает, что вы не очень много исследовали перед публикацией. Если это не помогает, вам нужно назвать такие сайты, которые вы искали, и объяснить, почему это не помогло.
Майк

Ответы:

171

Вы можете попробовать %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 .

VonC
источник
27

Для a []stringвы можете использовать strings.Join():

s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
// output: foo, bar, baz
jgillich
источник
18

Я предпочитаю fmt.Printf("%+q", arr)печатать

["some" "values" "list"]

https://play.golang.org/p/XHfkENNQAKb

Pylinux
источник
1
Как получить массив с разделителем запятой ??
Шоба
¯ \ _ (ツ) _ / ¯ Если вы найдете краткое решение, добавьте его в качестве ответа на этот вопрос. Бьюсь об заклад, это то, что ищет большинство людей.
Pylinux 07
4

Если вы просто хотите увидеть значения массива без скобок, вы можете использовать комбинацию 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 (strings.Trim (fmt.Sprintf (a), «[]») отсутствует парен с правой стороны. Спасибо за фрагмент.
pdbrito
1

Если вы хотите просмотреть информацию в срезе в том же формате, который вы использовали бы для ее ввода (что-то вроде ["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
}

Перейти на игровую площадку

Gamelub
источник
0

Я написал пакет под названием 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.

Inanc Gumus
источник