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.