如何打印切片的值


103

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

projects []Project  

9
除了fmt.Println(projects)
Not_a_Golfer 2014年

4
也:[]项目是一个切片,而不是一个阵列:golang.org/blog/go-slices-usage-and-internals
elithrar

为什么所有人都给我-1?
fnr 2014年

2
@fnr对不起,但是审阅者可能认为该问题很容易被文档解决。我已经更新了答案,以表明它并不总是那么明显。您可以留下您的问题,这是一个有效的问题。
VonC 2014年

2
@fnr-此站点上的-1表示以下问题:“不显示研究成果;尚不清楚或没有用”。因此,我看到您标记了您的问题“执行”和“数组”,并想知道“如何打印”它们。如果我去Google.com和搜索“GO编程语言教程阵列”我发现了大量的资源,包括看起来像它可能帮助。因此,如果这样做确实有帮助,则表明您在发布之前没有进行过多研究。如果这样做没有帮助,则需要调出您搜索过的类似网站,并说明为什么这样做没有帮助。
2014年

Answers:


171

你可以尝试%v%+v%#v动词去FMT

fmt.Printf("%v", projects)

如果您的数组(或此处的slice)包含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示例


26

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

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


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]]

有关更多信息,请参见string.Trim()的文档。


fmt.Printf(strings.Trim(fmt.Sprintf(a),“ []”)右侧缺少括号。感谢您的摘录
。– pdbrito


0

(创建了一个帐户以对现有答案发表评论,但直到有足够的代表后我才能发表评论)

如果您想以与您键入时使用的格式相同的方式查看切片中的信息(例如[“ one”,“ two”,“ three”]),下面的代码示例显示了如何执行此操作:

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


3
欢迎使用Stack Overflow!只要您的答案对主题有新贡献,它就属于答案部分。无需通过说您的代表太低来证明这一点;您的帖子是正确的:)话虽如此,通常最好直接在答案中包含您正在使用的任何代码而不是作为指向其他站点的链接。随时保留链接,但也将代码复制到您的答案中。谢谢!
Das_Geek

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.