ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
ဒီ 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 နမူနာ
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)
}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 ကို အမြဲပြန်သိမ်းရပါမယ်။