Go Structure
Introduction to Structs in Go
A struct in Go is a composite data type that groups together fields of different types under a single name. It is used to represent real-world entities with multiple attributes. Structs are similar to classes in object-oriented programming but do not support inheritance.
Syntax of Structs in Go
A struct is defined using the type keyword, followed by the struct name and a block containing field definitions.
package main import "fmt" // Defining a struct type Car struct { Brand string Model string Year int Price float64 } func main() { // Creating an instance of the Go struct myCar := Car{ Brand: "Toyota", Model: "Camry", Year: 2022, Price: 28000.50, } // Printing struct details fmt.Println("Car Details:") fmt.Println("Brand:", myCar.Brand) fmt.Println("Model:", myCar.Model) fmt.Println("Year:", myCar.Year) fmt.Println("Price:", myCar.Price) }
Struct Initialization Methods
Go provides multiple ways to initialize a struct:
1. Using a Struct Literal (Named Fields)
p1 := Person{Name: "Alice", Age: 25}
2. Using a Struct Literal (Ordered Fields)
p2 := Person{"Bob", 30}
3. Using the new Keyword (Returns a Pointer)
p3 := new(Person) p3.Name = "Charlie" p3.Age = 35
Example: Struct with Methods
Methods can be associated with structs using a receiver function.
package main import "fmt" type Rectangle struct { Width float64 Height float64 } // Method to calculate area func (r Rectangle) Area() float64 { return r.Width * r.Height } func main() { rect := Rectangle{Width: 10.5, Height: 5.2} fmt.Println("Area of Rectangle:", rect.Area()) }
Pointers to Structs
Pointers allow modifying the original struct instance from a method.
package main import "fmt" type Counter struct { Value int } // Method to increment the value func (c *Counter) Increment() { c.Value++ } func main() { c := Counter{Value: 10} c.Increment() fmt.Println("Updated Counter:", c.Value) }
Struct Embedding (Inheritance-like Behavior)
Go does not support traditional inheritance, but it allows struct embedding.
package main import "fmt" type Person struct { Name string Age int } type Employee struct { Person Position string } func main() { e := Employee{ Person: Person{Name: "John", Age: 40}, Position: "Manager", } fmt.Println("Employee Name:", e.Name) // Accessing embedded field fmt.Println("Position:", e.Position) }
Anonymous Structs
A struct can be declared without defining a separate type.
package main import "fmt" func main() { student := struct { Name string Score int }{"Emma", 95} fmt.Println("Student Name:", student.Name) fmt.Println("Score:", student.Score) }
Conclusion
Structs in Go provide a powerful way to group related data together. They allow defining methods, using pointers for modifications, and leveraging struct embedding for reusable code. They are widely used in Go applications for defining complex data structures efficiently.
Previous