A struct, short for “structure,” is a way to bundle together multiple pieces of data with different types into a single entity. Unlike arrays, which store multiple values of the same type, structs allow different types to coexist within a single unit, making them useful for organizing related data.
Declaring a Struct
In Go, a struct is defined using the type
keyword followed by the struct name and its members.
Syntax:
type structName struct {
member1 datatype
member2 datatype
member3 datatype
}
Example:
Here, Motorcycle
is a struct that groups multiple details about a motorcycle, such as brand, model, year, and price.
type Motorcycle struct {
brand string
model string
year int
price int
}
Each member of the struct can have a different data type. In this example, brand
and model
are strings, while year
and price
are integers.
Accessing Struct Members
To access the elements within a struct, use the dot (.
) operator.
Example:
Below, two instances of the Motorcycle
struct (bike1
and bike2
) are created and their attributes are assigned values.
package main
import ("fmt")
type Motorcycle struct {
brand string
model string
year int
price int
}
func main() {
var bike1 Motorcycle
var bike2 Motorcycle
// Assigning values to bike1
bike1.brand = "Yamaha"
bike1.model = "R1"
bike1.year = 2022
bike1.price = 15000
// Assigning values to bike2
bike2.brand = "Ducati"
bike2.model = "Panigale V4"
bike2.year = 2023
bike2.price = 25000
// Printing bike1 details
fmt.Println("Brand: ", bike1.brand)
fmt.Println("Model: ", bike1.model)
fmt.Println("Year: ", bike1.year)
fmt.Println("Price: $", bike1.price)
// Printing bike2 details
fmt.Println("Brand: ", bike2.brand)
fmt.Println("Model: ", bike2.model)
fmt.Println("Year: ", bike2.year)
fmt.Println("Price: $", bike2.price)
}
Output:
Brand: Yamaha
Model: R1
Year: 2022
Price: $15000
Brand: Ducati
Model: Panigale V4
Year: 2023
Price: $25000
Passing a Struct as a Function Argument
Structs can also be passed as arguments to functions, allowing for cleaner code when working with structured data.
Example:
The following program defines a function printMotorcycle()
that takes a Motorcycle
struct as an argument and prints its details.
package main
import ("fmt")
type Motorcycle struct {
brand string
model string
year int
price int
}
func main() {
var bike1 Motorcycle
var bike2 Motorcycle
// Assigning values to bike1
bike1.brand = "Kawasaki"
bike1.model = "Ninja ZX-10R"
bike1.year = 2021
bike1.price = 18000
// Assigning values to bike2
bike2.brand = "Honda"
bike2.model = "CBR1000RR"
bike2.year = 2022
bike2.price = 20000
// Calling function to print details
printMotorcycle(bike1)
printMotorcycle(bike2)
}
func printMotorcycle(bike Motorcycle) {
fmt.Println("Brand: ", bike.brand)
fmt.Println("Model: ", bike.model)
fmt.Println("Year: ", bike.year)
fmt.Println("Price: $", bike.price)
}
Output:
Brand: Kawasaki
Model: Ninja ZX-10R
Year: 2021
Price: $18000
Brand: Honda
Model: CBR1000RR
Year: 2022
Price: $20000