Task Definition
Vazifa ta'rifi
Har qanday navbat tizimida, avval navbatga TURADIGAN narsaning o'zi qanday ko'rinishda ekanligini aniqlash kerak. Bizning Task Queue uchun bu — bitta bajarilishi kerak bo'lgan ishni ifodalovchi Task struct'i.
package main
import "fmt"
type TaskStatus string
const (
StatusPending TaskStatus = "pending"
StatusRunning TaskStatus = "running"
StatusCompleted TaskStatus = "completed"
StatusFailed TaskStatus = "failed"
)
type Task struct {
ID string
Payload string
Status TaskStatus
Attempts int
}
func NewTask(id, payload string) *Task {
return &Task{
ID: id,
Payload: payload,
Status: StatusPending,
}
}
func main() {
task := NewTask("task-1", "email yuborish: aziz@example.com")
fmt.Println(task.ID, task.Status)
}TaskStatus string — "Custom Types & Type Definitions" darsida ko'rgan naqsh: oddiy string o'rniga maxsus tur yaratish, unga faqat BELGILANGAN qiymatlarni (pending, running, completed, failed) berish mumkinligini ANGLATADI (garchi Go buni majburlab qo'ymasa ham, bu — kodni o'qiydigan odam uchun aniq "hujjat"). Bu — "iota & Enums" darsida ko'rgan g'oyaning satr-asosli ko'rinishi.
Attempts int — vazifa necha marta BAJARISHGA URINILGANINI hisoblaydi, bu "Retry Logic" darsida kerak bo'ladi. Har bir yangi Task — NewTask orqali, har doim StatusPending (kutilmoqda) holatida BOSHLANADI: hali hech kim uni bajarishga kirishmagan.
>_ Exercise
Task'ga bajarilish natijasini saqlash imkonini qo'shing.
- •Task struct'iga Result string maydonini qo'shing
- •Complete(result string) metodini yozing: t.Status = StatusCompleted, t.Result = result
- •task yaratib, Complete("email yuborildi") ni chaqiring, so'ng Status va Result'ni chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Task struct'i — vazifaning identifikatori, ma'lumoti, joriy holati va urinishlar sonini birlashtirgan, butun Task Queue tizimining markazidagi ma'lumot birligi.
NEXT UP
Channel-Based Queue
$ go run main.go
Kodingizni ishga tushiring