package main import ( "fmt" "reflect" ) func main() { x := 42 v := reflect.ValueOf(x) if v.CanAddr() { p := v.Addr().Interface().(*int) *p = 99 } fmt.Println(x) // Output: 99 }
package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { p := Person{Name: "Alice", Age: 30} v := reflect.ValueOf(p) if v.Kind() == reflect.Struct { for i := 0; i < v.NumField(); i++ { field := v.Field(i) if field.CanAddr() { ptr := field.Addr() fmt.Printf("%v: %v\n", v.Type().Field(i).Name, ptr.Elem().Interface()) } } } // Output: // Name: Alice // Age: 30 }This example illustrates how to use the CanAddr method to examine the fields of a struct dynamically. The Addr method is used to obtain pointers to the fields, which are then used to print out their values. The reflect package is part of the standard library in Go.