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 تعيد *openemail.Page فيها Items وHasMore وNextCursor. مرّر NextCursor من جديد عبر openemail.WithCursor مع المرشحات نفسها لقراءة الصفحة التالية.
كل الصفحات
failed, err := client.Emails.ListAll(ctx, openemail.WithStatus("failed"))if err != nil { return err} fmt.Println(len(failed), "messages failed")دالة ListAll تتبع المؤشر حتى النهاية وتعيد كل العناصر في slice واحدة. الإخفاق في أي صفحة يُفشل الاستدعاء كله.
عنصر واحد في كل مرة
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 الطلبات. استخدم range على All()، أو استدعِ Next وItem وErr في حلقة عادية.
يتوقف المكرِّر حين تكرر الواجهة البرمجية مؤشرًا سبق أن تبعه، فلا يمكن أن يدور المرور إلى ما لا نهاية.