Understanding Go: Exploring Structs and Methods
Introduction:
Go is a statically typed, compiled programming language that offers a unique approach to object-oriented programming. Unlike languages such as C++ or Java, Go doesn’t have traditional classes. Instead, it utilizes structs and methods to achieve similar functionality. In this blog post, we’ll delve into a code snippet written in Go and explain how it works, step by step.
Code Explanation:
Let’s dissect the provided Go code snippet and understand its various components.
type Person struct {
Name string
Surname string
Hobbies []string
id string
}
func (person *Person) GetFullName() string {
return fmt.Sprintf("%s %s", person.Name, person.Surname)
}
func main() {
p := Person{
Name: "Mario",
Surname: "Castro",
Hobbies: []string{"cycling", "electronics", "planes"},
id: "sa3-223-asd",
}
fmt.Printf("%s likes %s, %s and %s\n", p.GetFullName(), p.Hobbies[0],
p.Hobbies[1], p.Hobbies[2])
}
The above example is taken from book : Go Design Patterns
Defining the Person Struct:
The code begins with the declaration of a struct named Person
. A struct is a composite data type that allows you to group together values of different types. In this case, the Person
struct has four fields:
Name
(string): Represents the person’s first name.
Surname
(string): Represents the person’s last name.
Hobbies
([]string): Represents a list of hobbies the person has. It is a slice of strings, allowing multiple hobbies to be stored.
id
(string): Represents a unique identifier for the person.
Creating a Method on the Person Struct:
Next, we define a method named GetFullName()
on the Person
struct. In Go, a method is associated with a struct by declaring the method with a receiver type. In this case, the receiver type is a pointer to the Person
struct (*Person)
. The purpose of this method is to concatenate the Name
and Surname
fields of a Person
instance and return the full name as a string.
The main() Function:
Moving on to the main()
function, we see the following steps:
Creating a Person
Instance: We create a new instance of the Person
struct named p using a struct literal. The values for the Name
, Surname
, Hobbies
, and id
fields are provided.
Calling the GetFullName()
Method: Using the instance p
, we call the GetFullName()
method defined on the Person
struct. This is achieved by using the dot notation (p.GetFullName()
).
Printing the Result: The fmt.Printf()
function is used to print a formatted string. The string includes the full name obtained from p.GetFullName()
and the first three hobbies from the Hobbies
field.
Output:
The final output of the program is the following string: “Mario Castro likes cycling, electronics, and planes”. This demonstrates that the code successfully retrieves the full name and prints it alongside the person’s hobbies.
Conclusion:
In conclusion, Go provides an alternative approach to object-oriented programming by utilizing structs and methods. Although Go doesn’t have classes like other languages, it allows you to associate methods with structs by defining a receiver type. This code snippet showcases the usage of structs and methods in Go, demonstrating how methods can be called on instances of a struct to perform specific operations. By understanding these concepts, developers can leverage Go’s unique approach to build efficient and concise code.