88 lines
1.6 KiB
Go
88 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
var numsToSum []int
|
|
var choice2 int
|
|
|
|
func getAverage(arr []int, c chan int) {
|
|
sum := 0
|
|
for i := 0; i < len(arr); i++ {
|
|
sum = sum + arr[i]
|
|
}
|
|
|
|
c <- sum
|
|
}
|
|
|
|
func addToVec(num int) {
|
|
numsToSum = append(numsToSum, num)
|
|
}
|
|
|
|
func statusMSG() {
|
|
fmt.Printf("Current numbers: %v\n", numsToSum)
|
|
fmt.Println("[1] Add number")
|
|
fmt.Println("[2] Calculate average")
|
|
fmt.Println("[3] Exit")
|
|
}
|
|
|
|
func getChoice2() {
|
|
strchoice2 := scanLine()
|
|
choice2, err = strconv.Atoi(strchoice2)
|
|
catchErr(err)
|
|
}
|
|
|
|
func getNumToAdd() (num int) {
|
|
fmt.Printf("Select your number: ")
|
|
strnum := scanLine()
|
|
num, err = strconv.Atoi(strnum)
|
|
return num
|
|
}
|
|
|
|
func fun2() {
|
|
|
|
// Create channel made for int values
|
|
c := make(chan int)
|
|
|
|
looper:
|
|
for {
|
|
clear()
|
|
statusMSG()
|
|
fmt.Printf("Choice: ")
|
|
getChoice2()
|
|
|
|
switch choice2 {
|
|
|
|
case 1:
|
|
numToAdd := getNumToAdd()
|
|
addToVec(numToAdd)
|
|
fmt.Printf("Succesfully added %v to the array\n", numToAdd)
|
|
time.Sleep(time.Second)
|
|
case 2:
|
|
// Send function call to goroutine while providing the channel for communication
|
|
go getAverage(numsToSum, c)
|
|
|
|
fmt.Printf("\rThinking.")
|
|
time.Sleep(time.Second)
|
|
fmt.Printf("\rThinking..")
|
|
time.Sleep(time.Second)
|
|
fmt.Printf("\rThinking...")
|
|
time.Sleep(time.Second)
|
|
fmt.Printf("\r\n")
|
|
|
|
// Get the result returned by the goroutine
|
|
total := <-c
|
|
average := total / len(numsToSum)
|
|
|
|
fmt.Printf("The grand total is %v\n", total)
|
|
fmt.Printf("The average value is %v\n", average)
|
|
time.Sleep(time.Second * 3)
|
|
case 3:
|
|
break looper
|
|
}
|
|
}
|
|
}
|