Example (Go) - Profit Calculator

module example.com/profit-calculator

go 1.21.6
package main

import (
	"errors"
	"fmt"
	"os"
)

func main() {
	// var revenue, expenses, taxRate float64

	// fmt.Print("Revenue: ")
	// fmt.Scan(&revenue)
	//
	// fmt.Print("Expenses: ")
	// fmt.Scan(&expenses)
	//
	// fmt.Print("Tax Rate: ")
	// fmt.Scan(&taxRate)

	revenue, err := getUserInput("Revenue: ")
	if err != nil {
		fmt.Println("Error:", err)
		panic("Revenue is not valid.")
	}

	expenses, err := getUserInput("Expenses: ")
	if err != nil {
		fmt.Println("error:", err)
		panic("expenses is not valid.")
	}

	taxRate, err := getUserInput("Tax Rate: ")
	if err != nil {
		fmt.Println("Error:", err)
		panic("Tax Rate is not valid.")
	}

	// var earnBeforeTax float64 = revenue - expenses
	// var earnAfterTax float64 = earnBeforeTax * (1 - taxRate/100)
	// var ratio float64 = earnBeforeTax / earnAfterTax
	earnBeforeTax, earnAfterTax, ratio := calculateFinancials(revenue, expenses, taxRate)

	// fmt.Println("EBT:", earnBeforeTax)
	// fmt.Println("Profit:", earnAfterTax)
	// fmt.Println("Ratio:", ratio)

	fmt.Printf("EBT: %.1f\nProfit: %.1f\nRatio: %.1f\n", earnBeforeTax, earnAfterTax, ratio)
	writeResultsToFile(earnBeforeTax, earnAfterTax, ratio)
}

func calculateFinancials(revenue, expenses, taxRate float64) (float64, float64, float64) {
	var earnBeforeTax float64 = revenue - expenses
	var earnAfterTax float64 = earnBeforeTax * (1 - taxRate/100)
	var ratio float64 = earnBeforeTax / earnAfterTax
	return earnBeforeTax, earnAfterTax, ratio
}

func getUserInput(infoText string) (float64, error) {
	var userInput float64
	fmt.Print(infoText)
	fmt.Scan(&userInput)

	if userInput <= 0 {
		return 0, errors.New("Value cannot be less than or equal to zero (0).")
	}

	return userInput, nil
}

func writeResultsToFile(earnBeforeTax, earnAfterTax, ratio float64) {
	var output string = fmt.Sprintf("EBT: %.2f\nProfit: %.2f\nRatio: %.2f\n",
                                    earnBeforeTax,
                                    earnAfterTax,
                                    ratio)
	os.WriteFile("results.txt", []byte(output), 0644)
}