package main import ( "encoding/json" "fmt" "os" ) type Book struct { Title string `json:"title"` Author string `json:"author"` Read bool `json:"read"` ID int `json:"id"` } func addBook(title string, author string) error { fmt.Println("add...") books, err := readJson() if err != nil { return err } var newID int if len(books) == 0 { newID = 1 } else { last := books[len(books)-1] newID = last.ID + 1 } newBook := Book{Title: title, Author: author, Read: false, ID: newID} books = append(books, newBook) erro := writeJson(books) if erro != nil { return erro } return nil } func listBooks() error { fmt.Println("list...") books, err := readJson() if err != nil { return err } fmt.Println("Hier ist Ihre aktuelle Buchübersicht:\n") for _, book := range books { fmt.Println("Titel:", book.Title) fmt.Println("Author:", book.Author) fmt.Println("Gelesen:", book.Read) fmt.Println("ID:", book.ID) fmt.Println("============================================") } return nil } func markBook(id int) error { books, err := readJson() if err != nil { return err } for i := 0; i < len(books); i++ { if books[i].ID == id { books[i].Read = true erro := writeJson(books) if erro != nil { return erro } return nil } } return fmt.Errorf("ID %d nicht gefunden!", id) } func readJson() ([]Book, error) { fmt.Println("read json...") data, err := os.ReadFile("books.json") if err != nil { return nil, err } var books []Book err = json.Unmarshal(data, &books) if err != nil { fmt.Println(err) return nil, err } return books, nil } func writeJson(books []Book) error { data, err := json.MarshalIndent(books, "", " ") if err != nil { return err } return os.WriteFile("books.json", data, 0644) } func ensureFileExists() error { _, err := os.Stat("books.json") if os.IsNotExist(err) { // Initialer Inhalt: leeres JSON-Array initialData := []byte("[]") return os.WriteFile("books.json", initialData, 0644) } return err }