Chapter 3 - Functions
Exercise 1: fmt.Printf
The program below should produce a table with student names, their scores on three tests, and the average of those scores.
Write a scoreSummary
function that accepts a string
parameter with the student name, followed by three float64
parameters with the test scores. Calculate the average of the scores by adding them all together and dividing the result by three. Then call fmt.Printf
to print a table row with the following columns:
- The student name string, with a width of 10 characters.
- The first test score, with a with of 8 characters, 2 of them decimal places.
- The second test score, with a with of 8 characters, 2 of them decimal places.
- The third test score, with a with of 8 characters, 2 of them decimal places.
- The average of the scores, with a with of 8 characters, 2 of them decimal places.
Separate the columns with a vertical bar surrounded by spaces, just like you see in the call to Printf
in the main
function.
The program output should look like this:
Name | Score 1 | Score 2 | Score 3 | Average
------------------------------------------------------
Jermaine | 95.40 | 82.30 | 74.60 | 84.10
Jessie | 79.30 | 99.10 | 82.50 | 86.97
Lamar | 82.20 | 95.40 | 77.60 | 85.07
When you’re ready, have a look at our solution.
Exercise 2: Return Values
You’re fed up with the neighborhood wildlife destroying your gardens. You have three rectangular garden plots that you need to surround with fencing:
- An 8.2 by 10 meter plot
- A 5 by 5.2 meter plot
- A 6.2 by 4.5 meter plot
You need to figure out how much fencing to buy. You’ll need to calculate the perimeter (two times the length plus two times the width) for each of these plots, then add the three perimeters together to get the total length of fencing.
Write a perimeter
function that takes two float64
parameters representing the length and width. perimeter
should return a float64
value representing the perimeter length.
Then, in your main
function, call perimeter
three times to calculate perimeters for the plots of land above. Add the three perimeters together, and print the total.
Output:
You'll need 78.6 meters of fencing
When you’re ready, have a look at our solution.
Exercise 3: Error Handling
Update your perimeter
function from the previous exercise to return an error if either the length or width are negative.
- If the given length is negative, return a perimeter of
0
and an error with the message “a length of [length] is invalid”. - If the given width is negative, return a perimeter of
0
and an error with the message “a width of [width] is invalid”. - Otherwise, return the calculated perimeter, and an error value of
nil
.
In your main
function, test returning an error by calling perimeter
with a negative value. If the returned error value is not nil
, print the error message and exit the program. Otherwise, print the returned perimeter.
Sample output:
2019/05/25 15:06:35 a width of -10.00 is invalid
exit status 1
Here’s our solution.