我是新手,仍然对指针感到困惑,但我已按照指令查询多行,但我得到的结果是一系列内存地址而不是实际值。
这个相同的结构,减去rows.Next()
对单个用户来说效果很好,所以我对这里问题的根源感到困惑。
最终我试图在模板中使用函数的结果,但我正在试图找出它的结构,所以我可以用我的HTML来区分它。
例如,如果我尝试运行下面的代码,我会得到类似:&{[0xc... 0xc... 0xc...]}
type User struct {
Id int `json:"int"`
Name string `json:"name"`
Role string `json:"role"`
}
type Users struct {
Users []*User
}
func getUsers(company string) *Users {
users := Users{}
rows, err := db.Query("SELECT Id, Name, Role...")
// Check err
defer rows.Close()
for rows.Next() {
user := &User{}
err = rows.Scan(&user.Id, &user.Name, &user.Role)
// Check err
users.Users = append(users.Users, user)
}
err = rows.Err()
// Check err
return &users
}
这就是我试图使用函数
的方法func userView(w http.ResponseWriter, r *http.Request) {
res := getUsers("test") // Should return 3 results
fmt.Println(res.Users)
}
答案 0 :(得分:1)
问题不在于提取数据,而是在数据显示中。 fmt.Println()
在给定指针时打印内存地址 - 因此它的行为完全符合预期。
如果您改为:
fmt.Printf("%+v", res.Users)
你会得到不同的结果,可能更接近你的期望。
如果您计划使用模板,那么您应该这样做 - 您的模板应该能够访问每个User
的字段。
但简短的回答是:您的测试方法无效。
答案 1 :(得分:0)
类型@ContainsTransformerMethods
public class HttpToUserTransformer {
@Transformer
public User stringToUser(@Payload String s, @InboundHeaders("*") Map<String, String> headers) {
User user = new User();
user.setName(headers.get("name"));
return user;
}
}
是指针的一部分。如果您打印返回值Users
,它看起来像一堆内存地址。还行吧。
如果要打印更有意义的内容,请为getUsers
编写String()
方法,在其中取消引用每个指针并构建包含结构字段的字符串。