Here I am again for the 30 Days of Code in Go. This is Saturday, but that doesn’t mean I will not code =). First of all, before starting to code I was thinking about the theme: classes. I was wondering if Go had support for it and I found some interesting material to read. First I read Why Go’s structs are superior to class-based inheritance and I found out the the inheritance model of Go is different from that of Java. Basically, you do not actually specify which class implements an interface, but the compiler. A class can implement several interfaces, not being limited to one super-class like in Java or C++. Another materials I read were Go by Example Structs, methods and interfaces. I am not so well versed on the syntax, but it is not hard to grasp it and start coding. Nevertheless, HackerRank was good to me and gave some starter code and I just implemented the methods.
The goal of this task is to receive an input $T$ indicating the number of ages of people that will be given later. For each of these ages, we have an instance that has a method that can say if the person is young, a teenager or old. It also checks for invalid ages and can increment the age by another method. The full solution is given below.
package main
import "fmt"
type person struct {
age int
}
func (p person) NewPerson(initialAge int) person {
if initialAge < 0 {
fmt.Printf("Age is not valid, setting age to 0.\n")
p.age = 0
} else {
p.age = initialAge
}
return p
}
func (p person) amIOld() {
if p.age < 13 {
fmt.Printf("You are young.\n")
} else if p.age >= 13 && p.age < 18 {
fmt.Printf("You are a teenager.\n")
} else {
fmt.Printf("You are old.\n")
}
}
func (p person) yearPasses() person {
p.age++
return p
}
func main() {
var T, age int
// get number of persons that
// will be given
fmt.Scan(&T)
for i := 0; i < T; i++ {
fmt.Scan(&age)
p := person{age: age}
// constructor? kind of
p = p.NewPerson(age)
p.amIOld()
for j := 0; j < 3; j++ {
p = p.yearPasses()
}
p.amIOld()
fmt.Println()
}
}
Executing it:
$ ./day_04
1 #T
15 #age
# output below
You are a teenager.
# the next considers some years have passed
You are old.
That’s all for this day of coding in Go! Thanks for reading!