El lenguaje Go proporciona una implementación de soporte incorporada de la reflexión en tiempo de ejecución y permite que un programa manipule objetos con tipos arbitrarios con la ayuda del paquete de reflexión. La función reflect.UnsafeAddr() en Golang se usa para obtener el puntero a los datos de v. Para acceder a esta función, es necesario importar el paquete reflect en el programa.
Sintaxis:
func (v Value) UnsafeAddr() uintptrParámetros: Esta función no acepta ningún parámetro.
Valor de retorno: esta función devuelve el puntero a los datos de v.
Los siguientes ejemplos ilustran el uso del método anterior en Golang:
Ejemplo 1:
C
// Golang program to illustrate // reflect.UnsafeAddr() Function package main import ( "fmt" "reflect" "unsafe" ) // Main function func main() { var s = struct{ foo int }{42} var i int rs := reflect.ValueOf(&s).Elem() rf := rs.Field(0) ri := reflect.ValueOf(&i).Elem() rf = reflect.NewAt(rf.Type(), unsafe.Pointer(rf.UnsafeAddr())).Elem() ri.Set(rf) rf.Set(ri) fmt.Println(rf) fmt.Println(ri) }
Producción:
42 42
Ejemplo 2:
C
// Golang program to illustrate // reflect.UnsafeAddr() Function package main import ( "fmt" "reflect" "unsafe" ) // Main function func main() { var s = struct{ foo int }{374} var i int rs := reflect.ValueOf(s) rf := rs.Field(0) rs2 := reflect.New(rs.Type()).Elem() rs2.Set(rs) rf = rs2.Field(0) rf = reflect.NewAt(rf.Type(), unsafe.Pointer(rf.UnsafeAddr())).Elem() ri := reflect.ValueOf(&i).Elem() // i, but writable ri.Set(rf) fmt.Println(rf) fmt.Println(ri) }
Producción:
374 374
Publicación traducida automáticamente
Artículo escrito por SHUBHAMSINGH10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA