Выход:
вид вывода необходим для отладки. Чтобы получить реальное значение среза указателей, каждый раз, когда требуется итерация.
Есть ли способ, мы можем напрямую иметь значение вместо адреса каждого элемента, присутствующего на слайсе, используя простой 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: "[email protected]"})
users = append(users, &user{userID: 2, name: "cooluser2", email: "[email protected]"})
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]
Чтобы прочитать значения всегда, я должен позвонитьfunc
любитьprintEachUser
итерировать срез и получить соответствующее значение.
выход:user at user[0] is : {1 cooluser1 [email protected]}
user at user[1] is : {2 cooluser2 [email protected]}
Есть ли способ, мы можем прочитать значения внутри слайса указателей, используяfmt.printf
и получить значение напрямую, как показано ниже?
users at slice [&{1 cooluser1 [email protected]} , &{2 cooluser2 [email protected]}]