调试目的需要这种输出。为了获得指针切片的实际值,每次都需要迭代。
有什么办法,我们可以使用简单的 fmt.printf() 直接获取值而不是切片中每个项目的地址?
这是一个代码片段: https ://play.golang.org/p/bQ5vWTlKZmV
package main
import (
"fmt"
)
type user struct {
userID int
name string
email string
}
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)
printEachUser(users)
}
func printUsers(users []*user) {
fmt.Printf("users at slice %v \n", users)
}
func printEachUser(users []*user) {
for index, u := range users {
fmt.Printf("user at user[%d] is : %v \n", index, *u)
}
}
在上面的代码中,如果我直接通过 fmt.printf 打印切片,我只会得到值的地址而不是实际值本身。
输出 :users at slice [0x442260 0x442280]
要始终读取值,我必须调用funclikeprintEachUser来迭代切片并获取适当的值。
输出: user at user[0] is : {1 cooluser1 cool.user1@gmail.com} user at user[1] is : {2 cooluser2 cool.user2@gmail.com}
有什么办法,我们可以像下面这样直接使用并获取值来读取指针切片内的值fmt.printf?
users at slice [&{1 cooluser1 cool.user1@gmail.com} , &{2 cooluser2 cool.user2@gmail.com}]
慕沐林林
BIG阳
拉莫斯之舞
相关分类