Go
ページネーション
1 ページ、全ページ、または 1 アイテムずつ。
1 ページ
page, err := client.Threads.List(ctx, openemail.WithFolder("inbox"), openemail.WithLimit(25))if err != nil { return err} for _, thread := range page.Items { fmt.Println(thread.ID())} if page.HasMore { next, err := client.Threads.List(ctx, openemail.WithFolder("inbox"), openemail.WithCursor(page.NextCursor)) if err != nil { return err } fmt.Println(len(next.Items))}List メソッドは Items、HasMore、NextCursor を持つ *openemail.Page を返します。次のページを読むには、同じフィルターを付けて NextCursor を openemail.WithCursor で渡します。
全ページ
failed, err := client.Emails.ListAll(ctx, openemail.WithStatus("failed"))if err != nil { return err} fmt.Println(len(failed), "messages failed")ListAll メソッドはカーソルを最後までたどり、すべての項目を 1 つのスライスで返します。いずれかのページで失敗すると、呼び出し全体が失敗します。
1 件ずつ
for contact, err := range client.Contacts.Iterate(ctx, openemail.WithLimit(100)).All() { if err != nil { return err } if contact.String("email") == "[email protected]" { break }} events := client.Emails.IterateEvents(ctx, "msg_3f9a1c07d2b84e6a9c5b1f20") for events.Next() { fmt.Println(events.Item().String("type"))} return events.Err()Iterate メソッドは *openemail.Iterator を返します。ループがそこに到達したときにだけ次のページを要求するため、break でリクエストが止まります。All() を range で回すか、通常のループで Next、Item、Err を呼び出します。
API がすでにたどったカーソルを繰り返すとイテレーターは停止するため、走査が無限に続くことはありません。