我想看看数组中的值。我该如何打印?
projects []Project
答案 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
}
答案 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)
}
此代码将像这样生成和输出:
有关更多详细信息,请阅读:https://github.com/inancgumus/prettyslice
答案 5 :(得分:1)
答案 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(...)