GoDasturchi
Task Definition

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.

example.go
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 TaskNewTask 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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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 TaskNewTask 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.

Hints (0/3)

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