From 60bc9586d16c1d259fd34e4376891d9a70d95697 Mon Sep 17 00:00:00 2001 From: Sebastian Steger Date: Wed, 20 Aug 2025 06:27:04 +0000 Subject: [PATCH] go basics --- go/01-basics/README.md | 84 ++++++++++++++++++++++++++++++++++++++ go/01-basics/calculator.go | 22 ++++++++++ go/01-basics/inventory.go | 50 +++++++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 go/01-basics/README.md create mode 100644 go/01-basics/calculator.go create mode 100644 go/01-basics/inventory.go diff --git a/go/01-basics/README.md b/go/01-basics/README.md new file mode 100644 index 0000000..8ef91a5 --- /dev/null +++ b/go/01-basics/README.md @@ -0,0 +1,84 @@ +# Go By Example + + + +# Assignment 1 - Simple Calculator + +## Objective +Write a Go program that performs basic mathematical operations (addition, subtraction, multiplication, and division) based on user input. + +## Steps + +1. Define constants for valid operations (*add*,*subtract*,*multiply*,*divide*). +2. Use variables to store user inputs and computed results. +3. Use a loop to allow the user to perform multiple calculations until they choose to exit. +4. Validate inputs using statements (e.g., handle division by zero). +5. Use a statement to perform the selected mathematical operation. + +## Example Output +``` +Enter operation (add, subtract, multiply, divide, exit): add +Enter the first number: 5 +Enter the second number: 3 +Result: 8 + +Enter operation (add, subtract, multiply, divide, exit): divide +Enter the first number: 10 +Enter the second number: 0 +Error: Division by zero is not allowed! + +Enter operation (add, subtract, multiply, divide, exit): exit +Goodbye! +``` + +## Hint +The program can use the `fmt.Scan` function to accept user input. + +# Assignment 2 - Inventory Management System + +## Objective +Create a program that simulates an inventory management system for a store. + +## Steps +1. Define product categories (e.g., Electronics, Groceries, Clothes) using `const` and `iota`. +2. Store a fixed list of initial product names in an **array**. +3. Convert the array into a **slice** so the inventory can grow or shrink dynamically. +4. Use a **map** to associate product names with details like quantity, price, and category. +5. Implement the following **functions**: + - *AddProduct*: Add a new product to the inventory. + - *RemoveProduct*: Remove a product from the inventory. + - *DisplayInventory*: Display all products with their details. + - *UpdateQuantity*: Update the quantity of a product. + +## Example Output +``` +Welcome to the Inventory Manager! + +Initial Inventory: +1. Laptop - Electronics (Price: $1000, Quantity: 5) +2. Apples - Groceries (Price: $2, Quantity: 50) +3. T-shirt - Clothes (Price: $10, Quantity: 20) + +Adding a new product: Phone (Electronics, Price: $800, Quantity: 10) + +Updated Inventory: +1. Laptop - Electronics (Price: $1000, Quantity: 5) +2. Apples - Groceries (Price: $2, Quantity: 50) +3. T-shirt - Clothes (Price: $10, Quantity: 20) +4. Phone - Electronics (Price: $800, Quantity: 10) + +Updating quantity for Apples: New Quantity = 30 + +Removing product: T-shirt + +Final Inventory: +1. Laptop - Electronics (Price: $1000, Quantity: 5) +2. Apples - Groceries (Price: $2, Quantity: 30) +3. Phone - Electronics (Price: $800, Quantity: 10) +``` + +- Use **arrays** to store initial product information. +- Use **slices** to dynamically manage items in the inventory. +- Use **maps** to track product details (e.g., quantity or price). +- Define **functions** for adding, removing, and displaying products. +- Use **enums** (via constants) to represent product categories. diff --git a/go/01-basics/calculator.go b/go/01-basics/calculator.go new file mode 100644 index 0000000..7686df8 --- /dev/null +++ b/go/01-basics/calculator.go @@ -0,0 +1,22 @@ +package main + +import ( + "fmt" +) + +func main() { + + //TODO: implement according to README.md + + //the following code just demonstrates how to use fmt.Scan + + var str string + fmt.Print("Please enter a string: ") + fmt.Scan(&str) + + var x float64 + fmt.Print("Please enter a float: ") + fmt.Scan(&x) + + fmt.Printf("You entered '%s' and %f\n", str, x) +} diff --git a/go/01-basics/inventory.go b/go/01-basics/inventory.go new file mode 100644 index 0000000..209c374 --- /dev/null +++ b/go/01-basics/inventory.go @@ -0,0 +1,50 @@ +package main + +type Product struct { + Name string + Price float64 + Quantity int + Category string //TODO: use enum instead +} + +func addProduct(inventory *[]Product, name string, price float64, quantity int, category string) { + //TODO: implement +} + +func removeProduct(inventory *[]Product, name string) { + //TODO: implement +} + +func updateQuantity(inventory *[]Product, name string, newQuantity int) { + //TODO: implement +} + +func displayInventory(inventory []Product) { + //TODO: implement +} + +func main() { + inventory := []Product{ + {Name: "Laptop", Price: 1000, Quantity: 5, Category: "Electronics"}, + {Name: "Apples", Price: 2, Quantity: 50, Category: "Groceries"}, + {Name: "T-shirt", Price: 10, Quantity: 20, Category: "Clothes"}, + } + + // Display initial inventory + displayInventory(inventory) + + // Add a new product + addProduct(&inventory, "Phone", 800, 10, "Electronics") + + // Display updated inventory + displayInventory(inventory) + + // Update the quantity of an existing product + updateQuantity(&inventory, "Apples", 30) + + // Remove a product + removeProduct(&inventory, "T-shirt") + + // Display final inventory + displayInventory(inventory) +}