如何打印切片的值

我想查看切片中的值。如何打印它们?

projects []Project
231197 次浏览

你可以试试 转到 fmt%v%+v%#v动词:

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()方法,以便准确显示您想要看到的内容(或者您将只看到指针地址)。
看这个 播放,举个 Golang 的例子

如果只想查看不带括号的数组值,可以使用 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]]

有关更多信息,请参见 字符串。修剪()的文档

对于 []string,你可以使用 strings.Join():

s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
// output: foo, bar, baz

我更喜欢 fmt.Printf("%+q", arr)打印

["some" "values" "list"]

Https://play.golang.org/p/xhfkennqakb

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
}

去游乐场

我写了一个叫做漂亮切片的包,你可以用它来可视化切片,以及它们的后台数组等等。

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)
}

这段代码会像下面这样产生和输出:

enter image description here


详情请参阅: https://github.com/inancgumus/prettyslice

您可以使用 for循环来打印 []Project,如@VonC 所示,答案非常好。

package main


import "fmt"


type Project struct{ name string }


func main() {
projects := []Project\{\{"p1"}, {"p2"}}
for i := range projects {
p := projects[i]
fmt.Println(p.name) //p1, p2
}
}