3 回答
TA贡献2016条经验 获得超9个赞
调试目的需要这种输出。
有什么办法,我们可以像下面这样直接使用并获取值来读取指针切片内的值fmt.Printf?
users []*user
fmt.Printf("users at slice %v \n", users)
users at slice [&{1 cooluser1 cool.user1@gmail.com}, &{2 cooluser2 cool.user2@gmail.com}]
包 fmt
import "fmt"
纵梁型
Stringer 由具有 String 方法的任何值实现,该方法定义该值的“本机”格式。String 方法用于打印作为操作数传递给任何接受字符串的格式或未格式化打印机(如 Print)的值。
type Stringer interface { String() string}
调试目的需要这种输出。
有什么办法,我们可以像下面这样直接使用并获取值来读取指针切片内的值fmt.Printf?
users []*user
fmt.Printf("users at slice %v \n", users)
users at slice [&{1 cooluser1 cool.user1@gmail.com}, &{2 cooluser2 cool.user2@gmail.com}]
包 fmt
import "fmt"
纵梁型
Stringer 由具有 String 方法的任何值实现,该方法定义该值的“本机”格式。String 方法用于打印作为操作数传递给任何接受字符串的格式或未格式化打印机(如 Print)的值。
type Stringer interface {
String() string
}
例如,
package main
import (
"fmt"
)
type user struct {
userID int
name string
email string
}
type users []*user
func (users users) String() string {
s := "["
for i, user := range users {
if i > 0 {
s += ", "
}
s += fmt.Sprintf("%v", user)
}
return s + "]"
}
func addUsers(users users) {
users = append(users, &user{userID: 1, name: "cooluser1", email: "cool.user1@gmail.com"})
users = append(users, &user{userID: 2, name: "cooluser2", email: "cool.user2@gmail.com"})
fmt.Printf("users at slice %v \n", users)
}
func main() {
var users users
addUsers(users)
}
游乐场:https://play.golang.org/p/vDmdiKQOpqD
输出:
users at slice [&{1 cooluser1 cool.user1@gmail.com}, &{2 cooluser2 cool.user2@gmail.com}]
TA贡献1859条经验 获得超6个赞
代码: https: //play.golang.org/p/rBzVZlovmEc
输出 :
切片用户 [{1 cooluser1 cool.user1@gmail.com} {2 cooluser2 cool.user2@gmail.com}]
使用纵梁你可以实现它。
参考: https: //golang.org/pkg/fmt/#Stringer
package main
import (
"fmt"
)
type user struct {
userID int
name string
email string
}
func (t user) String() string {
return fmt.Sprintf("{%v %v %v}", t.userID, t.name, t.email)
}
func main() {
var users []*user
addUsers(users)
}
func addUsers(users []*user) {
users = append(users, &user{userID: 1, name: "cooluser1", email: "cool.user1@gmail.com"})
users = append(users, &user{userID: 2, name: "cooluser2", email: "cool.user2@gmail.com"})
printUsers(users)
}
func printUsers(users []*user) {
fmt.Printf("users at slice %v \n", users)
}
您不需要将 stringer 应用于用户,即 []*users 相反,如果您只为单个用户执行此操作,它就可以正常工作。它还减少了您需要手动执行的字符串操作,使您的代码更加优雅。
TA贡献1820条经验 获得超10个赞
您可以使用spew
go get -u github.com/davecgh/go-spew/spew
func spewDump(users []*user) {
_, err := spew.Printf("%v", users)
if err != nil {
fmt.Println("error while spew print", err)
}
}
输出:
[<*>{1 cooluser1 cool.user1@gmail.com} <*>{2 cooluser2 cool.user2@gmail.com}]
- 3 回答
- 0 关注
- 128 浏览
添加回答
举报