Thuta Learning
ရှာဖွေရန်
ProjectsProgrammingbeginner

Mini Project: Task Manager (Part 1) - Struct & Slice

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Mini Project: Task Manager (Part 1) - Struct & Slice ကို လက်တွေ့ project ထဲမှာ အသုံးချတတ်မယ်
  • ကိုယ်တိုင် code ရေးပြီး run ကြည့်တတ်မယ်
  • Project တစ်ခုလုံးကို အဆင့်လိုက် ဆောက်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

ဒီ project မှာ struct, slice, function, loop စတဲ့ Basic chapter မှာသင်ခဲ့တဲ့ concept တွေကို တစ်ခုတည်းသော application အနေနဲ့ ပေါင်းစပ်သုံးပါမယ်။ Task Manager က terminal ပေါ်မှာ task list ကို ထိန်းသိမ်းပြီး Add, List, Complete, Remove စတဲ့ command လေးတွေလုပ်ဆောင်နိုင်တဲ့ program တစ်ခုဖြစ်ပါတယ်။ ဒီ Part 1 မှာတော့ core data structure ဖြစ်တဲ့ Task struct ကို ဒီဇိုင်းဆွဲပြီး၊ task တွေကို slice ထဲမှာ သိမ်းထားတဲ့ list တစ်ခု တည်ဆောက်ပါမယ်။ နောက် Part 2, Part 3 တွေမှာ feature တွေတိုးထည့်ပြီး project ကို တဖြည်းဖြည်း ပြည့်စုံအောင် တည်ဆောက်သွားမှာပါ။ Real-world app တစ်ခု ဘယ်လို data model နဲ့ စတင်ရလဲဆိုတာကို ဒီအဆင့်မှာ အဓိကသင်ယူရမှာပါ။

လက်တွေ့ ဆောက်ကြည့်မယ်

Task struct ကို ID (int), Title (string), Done (bool) field တွေနဲ့ define လုပ်ပါ။ main() ထဲမှာ tasks []Task ဆိုတဲ့ slice variable ကို declare လုပ်ပါ။ addTask(tasks []Task, title string) []Task function ရေးပြီး new Task တစ်ခု append လုပ်ကာ slice အသစ်ကို return ပြန်ပါ။ listTasks(tasks []Task) function ရေးပြီး for range loop နဲ့ task list ကို index, title, done status နဲ့တကွ print ထုတ်ပါ။ Done status ကို [ ] နဲ့ [x] format နဲ့ ပြသအောင်လုပ်ပါ။

Code နမူနာ

go
package main

import "fmt"

type Task struct {
	ID    int
	Title string
	Done  bool
}

func addTask(tasks []Task, title string) []Task {
	newTask := Task{
		ID:    len(tasks) + 1,
		Title: title,
		Done:  false,
	}
	return append(tasks, newTask)
}

func listTasks(tasks []Task) {
	if len(tasks) == 0 {
		fmt.Println("Task list is empty.")
		return
	}
	for _, t := range tasks {
		status := "[ ]"
		if t.Done {
			status = "[x]"
		}
		fmt.Printf("%s %d. %s\n", status, t.ID, t.Title)
	}
}

func main() {
	var tasks []Task
	tasks = addTask(tasks, "Learn Go basics")
	tasks = addTask(tasks, "Build task manager")
	tasks = addTask(tasks, "Write tests")

	listTasks(tasks)
}
You should see
Terminal မှာ task 3 ခုကို [ ] status နဲ့ numbered list format ဖြင့် print ထုတ်ပေးပါလိမ့်မယ်။

၅ မိနစ် စမ်းကြည့်

5 minutes အတွင်း addTask function ကို ခေါ်ပြီး task 5 ခုအထိ ထပ်ထည့်ကြည့်ပါ၊ Done field ကို task တစ်ခုအတွက် true လို့ manual ပြောင်းပြီး listTasks output ဘယ်လိုပြောင်းလဲ စမ်းကြည့်ပါ။

သတိလေးတစ်ချက်

Slice ကို function ထဲပို့ရင် append လုပ်ပြီးရင် capacity အလိုက် original slice မထိခိုက်နိုင်တာကြောင့် function ကနေ return ပြန်တဲ့ slice ကို အမြဲပြန်သိမ်းရပါမယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • addTask function ရဲ့ return value ကို tasks variable ထဲ ပြန်မထည့်ဘဲ tasks = addTask(...) မလုပ်ပဲ addTask(tasks, title) ချည်း ခေါ်တတ်တာ - slice က append ဖြစ်ပေမယ့် original variable ထဲ ပြန်မသိမ်းရင် update မဖြစ်ပါ
  • Task struct field name တွေကို lowercase (id, title) နဲ့ define လုပ်ပြီး main package ပြင်ပက file တွေက access လုပ်လို့မရတော့တာ - struct field ကို export ချင်ရင် Uppercase နဲ့ စရမှာဖြစ်တယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

5 minutes အတွင်း addTask function ကို ခေါ်ပြီး task 5 ခုအထိ ထပ်ထည့်ကြည့်ပါ၊ Done field ကို task တစ်ခုအတွက် true လို့ manual ပြောင်းပြီး listTasks output ဘယ်လိုပြောင်းလဲ စမ်းကြည့်ပါ။

You'll know it worked when: Terminal မှာ task 3 ခုကို [ ] status နဲ့ numbered list format ဖြင့် print ထုတ်ပေးပါလိမ့်မယ်။

Mini Project: Task Manager (Part 1) - Struct & Slice | Thuta Learning