Firestore 检索数据并转换为结构

Firestore retrieve data and convert to a struct

我正在使用 firestore 存储库中的代码片段:

firestore-golang-snippets

我有一个 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"`
}