// Inventory System -- main (finished). // // Run from this folder: // cd projects/05-inventory/finished // go run . package main import ( "fmt" "slices" "inventorysystem/inventory" ) // addItem makes an item and adds it to the bag, or prints why it could not. func addItem(bag *inventory.Inventory, name string, weight float64, value int) { item, err := inventory.NewItem(name, weight, value) if err != nil { fmt.Println("Error:", err) return } bag.Add(item) } // removeItem removes an item by name, and prints what happened. func removeItem(bag *inventory.Inventory, name string) { removed := bag.Remove(name) if removed == nil { fmt.Println("(no " + name + " to remove)") return } fmt.Println("(removed " + removed.Name() + ")") } // showCounts prints the count for each name, in sorted order. func showCounts(bag *inventory.Inventory) { counts := bag.Counts() names := []string{} for name := range counts { names = append(names, name) } slices.Sort(names) fmt.Println("Counts:") for _, name := range names { fmt.Printf(" %s: %d\n", name, counts[name]) } } func main() { bag := inventory.New() addItem(bag, "sword", 3.5, 50) addItem(bag, "shield", 5.0, 30) addItem(bag, "potion", 0.2, 5) bag.List() fmt.Println() removeItem(bag, "sword") fmt.Println() bag.List() fmt.Println() removeItem(bag, "lantern") addItem(bag, "rock", -1, 0) addItem(bag, "potion", 0.2, 5) fmt.Println() showCounts(bag) }