reflect.UnsafeAddr() Funktion in Golang mit Beispielen
Die Go-Sprache bietet eine eingebaute Unterstützungsimplementierung der Laufzeitreflexion und ermöglicht es einem Programm, Objekte mit beliebigen Typen mit Hilfe des Reflect-Pakets zu manipulieren. Die Funktion reflect.UnsafeAddr() in Golang wird verwendet, um den Zeiger auf die Daten von v zu erhalten. Um auf diese Funktion zugreifen zu können, muss das Reflect-Paket in das Programm importiert werden.
Syntax:
func (v Wert) UnsafeAddr() uintptrParameter: Diese Funktion akzeptiert keine Parameter.
Rückgabewert: Diese Funktion gibt den Zeiger auf die Daten von v zurück.
Die folgenden Beispiele veranschaulichen die Verwendung der obigen Methode in Golang:
Beispiel 1:
// 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) }
Ausgabe:
42 42
Beispiel 2:
// 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 writeable ri.Set(rf) fmt.Println(rf) fmt.Println(ri) }
Ausgabe:
374 374