문서로 건너뛰기
Go

페이지네이션

한 페이지, 모든 페이지, 또는 한 번에 한 항목씩.

한 페이지

page.go
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로 다시 전달하세요.

모든 페이지

all.go
failed, err := client.Emails.ListAll(ctx, openemail.WithStatus("failed"))if err != nil {	return err} fmt.Println(len(failed), "messages failed")

ListAll 메서드는 커서를 끝까지 따라가 모든 항목을 하나의 슬라이스로 반환합니다. 어느 페이지에서든 실패하면 호출 전체가 실패합니다.

한 번에 하나씩

iterate.go
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가 이미 따라간 커서를 반복하면 이터레이터가 멈추므로, 순회가 끝없이 도는 일은 없습니다.