package main import ( "encoding/json" "errors" "fmt" "os" ) const petsFile = "pets.json" type pet struct { Name string Age int } func loadPets() ([]pet, error) { data, err := os.ReadFile(petsFile) if errors.Is(err, os.ErrNotExist) { return []pet{}, nil } if err != nil { return nil, err } var loaded []pet err = json.Unmarshal(data, &loaded) if err != nil { return nil, fmt.Errorf("%s is not valid: %v", petsFile, err) } return loaded, nil } func savePets(list []pet) error { data, err := json.MarshalIndent(list, "", " ") if err != nil { return err } temporary := petsFile + ".tmp" err = os.WriteFile(temporary, data, 0644) if err != nil { return err } return os.Rename(temporary, petsFile) } func main() { pets, err := loadPets() if err != nil { fmt.Println("Error:", err) return } pets = append(pets, pet{Name: "Rex", Age: len(pets) + 1}) err = savePets(pets) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Pets:", pets) }