Firestore 检索数据并转换为结构
Firestore retrieve data and convert to a struct
我正在使用 firestore 存储库中的代码片段:
我有一个 UserFeed
的结构
type UserFeed struct {
date time.Time `firestore:"date,omitempty"`
reelUrl string `firestore:"reelUrl,omitempty"`
uid string `firestore:"uid,omitempty"`
username string `firestore:"username,omitempty"`
}
我正在编写一个 getFeed 函数来获取用户提要,如下所示:
func GetFeed(ctx context.Context, client *firestore.Client) error {
// [START fs_get_all_docs]
fmt.Println("All feed items:")
userID := "abcdefghsifkasfkhkfjlkdsaj"
userFeedRef := client.Collection("feed").Doc(userID).Collection("userFeed")
iter := userFeedRef.Documents(ctx)
for {
doc, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
return err
}
var userFeed UserFeed
doc.DataTo(&userFeed)
// fmt.Println(userFeed)
fmt.Printf("Document data: %#v\n", userFeed)
fmt.Println(doc.Data())
}
// [END fs_get_all_docs]
return nil
}
现在当我 运行 这个时,我得到输出:
Document data: feed.UserFeed{date:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, reelUrl:"", uid:"", username:""}
map[date:2020-08-15 07:06:16.183 +0000 UTC reelUrl:https:correctURL.com uid:correctUID username:somethingElse]
我的 firestore 文件存储为 /feed/userName/userFeed/documents
我无法理解,为什么转换后数据会转换为 0 和 nil。
返回的数据不是“转换为0s和nil”,这些是它们对应数据类型(零时间对象,空字符串)的零值。
要使(非)封送拆收器能够正常运行,它们必须能够访问您的结构中的字段。这需要字段 exported(以大写字母开头)。
将结构更改为以下内容(注意:结构标记中的名称与模式中的名称保持一致,仅更改字段名称):
type UserFeed struct {
Date time.Time `firestore:"date,omitempty"`
ReelUrl string `firestore:"reelUrl,omitempty"`
Uid string `firestore:"uid,omitempty"`
Username string `firestore:"username,omitempty"`
}
我正在使用 firestore 存储库中的代码片段:
我有一个 UserFeed
type UserFeed struct {
date time.Time `firestore:"date,omitempty"`
reelUrl string `firestore:"reelUrl,omitempty"`
uid string `firestore:"uid,omitempty"`
username string `firestore:"username,omitempty"`
}
我正在编写一个 getFeed 函数来获取用户提要,如下所示:
func GetFeed(ctx context.Context, client *firestore.Client) error {
// [START fs_get_all_docs]
fmt.Println("All feed items:")
userID := "abcdefghsifkasfkhkfjlkdsaj"
userFeedRef := client.Collection("feed").Doc(userID).Collection("userFeed")
iter := userFeedRef.Documents(ctx)
for {
doc, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
return err
}
var userFeed UserFeed
doc.DataTo(&userFeed)
// fmt.Println(userFeed)
fmt.Printf("Document data: %#v\n", userFeed)
fmt.Println(doc.Data())
}
// [END fs_get_all_docs]
return nil
}
现在当我 运行 这个时,我得到输出:
Document data: feed.UserFeed{date:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, reelUrl:"", uid:"", username:""}
map[date:2020-08-15 07:06:16.183 +0000 UTC reelUrl:https:correctURL.com uid:correctUID username:somethingElse]
我的 firestore 文件存储为 /feed/userName/userFeed/documents
我无法理解,为什么转换后数据会转换为 0 和 nil。
返回的数据不是“转换为0s和nil”,这些是它们对应数据类型(零时间对象,空字符串)的零值。
要使(非)封送拆收器能够正常运行,它们必须能够访问您的结构中的字段。这需要字段 exported(以大写字母开头)。
将结构更改为以下内容(注意:结构标记中的名称与模式中的名称保持一致,仅更改字段名称):
type UserFeed struct {
Date time.Time `firestore:"date,omitempty"`
ReelUrl string `firestore:"reelUrl,omitempty"`
Uid string `firestore:"uid,omitempty"`
Username string `firestore:"username,omitempty"`
}