AzLearn

تمرين إعادة البناء

Todo List JSON

أعد كتابة برنامج Go يحفظ قائمة مهام بصيغة JSON.

go ~16 دقيقة مبتدئ
أعد بناء الكود Rebuild

هذا هو الكود. اكتبه بنفسك.

الكود المرجعي
package main

import (
	"encoding/json"
	"fmt"
	"os"
)

type Todo struct {
	ID   int    `json:"id"`
	Text string `json:"text"`
	Done bool   `json:"done"`
}

func saveTodos(path string, todos []Todo) error {
	data, err := json.MarshalIndent(todos, "", "  ")
	if err != nil {
		return err
	}
	return os.WriteFile(path, data, 0o644)
}

func loadTodos(path string) ([]Todo, error) {
	data, err := os.ReadFile(path)
	if err != nil {
		return nil, err
	}

	var todos []Todo
	err = json.Unmarshal(data, &todos)
	return todos, err
}

func main() {
	path := "todos.json"
	todos := []Todo{
		{ID: 1, Text: "write a small Go program", Done: true},
		{ID: 2, Text: "run it from the terminal", Done: false},
	}

	if err := saveTodos(path, todos); err != nil {
		fmt.Println("error:", err)
		return
	}
	defer os.Remove(path)

	loaded, err := loadTodos(path)
	if err != nil {
		fmt.Println("error:", err)
		return
	}

	for _, todo := range loaded {
		fmt.Printf("#%d done=%t %s\n", todo.ID, todo.Done, todo.Text)
	}
}
اكتب هنا