Golang - 如何打印数组的值?

时间:2014-06-30 11:44:22

标签: arrays go

我想看看数组中的值。我该如何打印?

projects []Project  

8 个答案:

答案 0 :(得分:118)

您可以试用go fmt%v%+v%#v动词:

fmt.Printf("%v", projects)

如果您的数组(或here 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 example

答案 1 :(得分:12)

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

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

答案 2 :(得分:3)

如果您只想查看没有括号的数组值,可以使用fmt.Sprint()strings.Trim()的组合

a := []string{"a", "b"}
fmt.Printf(strings.Trim(fmt.Sprintf(a), "[]")
fmt.Printf(a)

返回:

a b
[a b]

请注意,使用此解决方案时,任何前导括号都将从第一个值中丢失,并且任何尾随括号将从最后一个值中丢失

a := []string{"[a]", "[b]"}
fmt.Printf(strings.Trim(fmt.Sprintf(a), "[]")
fmt.Printf(a)

返回:

a] [b
[[a] [b]]

有关详细信息,请参阅strings.Trim()

的文档

答案 3 :(得分:2)

如果您想以切片时所用的格式查看信息(例如["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
}

Go Playground

答案 4 :(得分:2)

我写了一个名为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)
}

此代码将像这样生成和输出:

enter image description here


有关更多详细信息,请阅读:https://github.com/inancgumus/prettyslice

答案 5 :(得分:1)

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

["some" "values" "list"]

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

答案 6 :(得分:1)

您可以使用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
    }
}

答案 7 :(得分:0)

fmt.Printf()很好,但是有时候我喜欢使用pretty print package

import "github.com/kr/pretty"
pretty.Print(...)