The struct types store the variables of different data types and we use the struct variable to access the members of the struct.
In Go, we can also create a pointer variable of struct type.
Before you learn about pointers to struct, make sure to know about:
Go Pointer to Struct
Suppose we have a struct like this
type Person struct {
name string
age int
}
Now, let's create a struct variable of Person type.
person1 := Person{"John", 25}
Similar to this, we can also create a pointer variable of struct type.
var ptr *Person
We can now assign the address of the struct variable to this pointer variable. Let's see an example.
package main
import "fmt"
func main() {
// declare a struct Person
type Person struct {
name string
age int
}
// instance of the struct Person
person1 := Person{"John", 25}
// create a struct type pointer that
// stores the address of person1
var ptr *Person
ptr = &person1
// print struct instance
fmt.Println(person1)
// print the struct type pointer
fmt.Println(ptr)
}
Output
{John 25} &{John 25}
In the above example, we have created a struct variable person1 that initialized the struct members; name
to John
and age to 25.
We have also created a pointer variable of the struct type that stores the address of person1.
var ptr *Person
ptr = &person1
Since the ptr now stores the address of person1, we get &{John 25}
as the output while printing ptr.
Note: We can also create struct-type pointers and assign variable addresses in the same line. For example,
var ptr = &person1
Access struct using pointer in Golang
We can also access the individual member of a struct using the pointer. For example,
// Program to access the field of a struct using pointer
package main
import "fmt"
func main() {
// declare a struct Person
type Person struct {
name string
age int
}
person := Person{"John", 25}
// create a struct type pointer that
// stores the address of person
var ptr *Person
ptr = &person
// access the name member
fmt.Println("Name:", ptr.name)
// access the age member
fmt.Println("Age:", ptr.age)
}
Output
Name: John Age: 25
In the above example, we have used the struct type pointer to access struct members:
ptr.name
- gives the value of the name memberptr.age
- gives the value of the age member
Here, we have used the dot operator to access the struct members using the pointer.
Note: We can also use the dereference operator, *
to access the members of struct. For example,
fmt.Println(ptr.name) // John
fmt.Println((*ptr).name) // John
Change the Struct member in Go
Similarly, we can also use the pointer variable and the dot operator to change the value of a struct member. For example,
// Program to change the struct member using pointer
package main
import "fmt"
// create struct
type Weather struct{
city string
temperature int
}
func main() {
// create struct variable
weather := Weather{"California", 20}
fmt.Println("Initial Weather:", weather)
// create struct type pointer
ptr := &weather
// change value of temperature to 25
ptr.temperature = 25
fmt.Println("Updated Weather:", weather)
}
Output
Initial Weather: {California 20} Updated Weather: {California 25}
In the above example, notice the line
ptr.temperature = 25
Here, we have changed the value of the struct member temperature to 25 using the pointer variable ptr.