Heim  >  Artikel  >  Backend-Entwicklung  >  Wie macht man eine Schnittstelle in Golang ungültig?

Wie macht man eine Schnittstelle in Golang ungültig?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 21:11:02244Durchsuche

How do you nullify an interface in Golang?

Annullierung einer Schnittstelle in Golang

Problem:

Versuch, einen internen Wert von zu annullieren Eine Schnittstelle wirft die Frage auf: Wie implementiert man eine solche Funktion, setNil(typ interface{})?

Antwort:

Um eine Schnittstelle effektiv zu nullen, ist es von entscheidender Bedeutung Denken Sie daran, dass sich die Arbeit mit einem Zeigerwert von der Arbeit mit einem Schnittstellenwert unterscheidet. Da Zeiger als Referenz übergeben werden, muss ein Zeiger auf die Schnittstelle übergeben werden, um ihren internen Zustand zu ändern.

Funktion zur Nullifizierung der Schnittstelle{}:

<code class="go">func setNilIf(v *interface{}) {
    *v = nil
}</code>

Verwendung:

<code class="go">var i interface{} = "Bob"
fmt.Printf("Before: %v\n", i)
setNilIf(&i)
fmt.Printf("After: %v\n", i)</code>

Ausgabe:

Before: Bob
After: <nil>

Funktion zur Nullifizierung von Zeigern (Unsafe.Pointer):

Um einen Zeiger zu annullieren, kann er in einen unsafe.Pointer konvertiert und dereferenziert werden:

<code class="go">func setNilPtr(p unsafe.Pointer) {
    *(**int)(p) = nil
}</code>

Verwendung:

<code class="go">typ := &TYP{InternalState: "filled"}
fmt.Printf("Before: %v\n", typ)
setNilPtr(unsafe.Pointer(&typ))
fmt.Printf("After: %v\n", typ)</code>

Ausgabe:

Before: &{filled}
After: <nil>

Funktion zur Nullifizierung von Zeigern (Reflexion):

Schließlich kann Reflexion auch zur Nullifizierung eines Zeigers verwendet werden:

<code class="go">func setNilPtr2(i interface{}) {
    v := reflect.ValueOf(i)
    v.Elem().Set(reflect.Zero(v.Elem().Type()))
}</code>

Verwendung:

<code class="go">typ2 := &TYP{InternalState: "filled"}
fmt.Printf("Before: %v\n", typ2)
setNilPtr2(&typ2)
fmt.Printf("After: %v\n", typ2)</code>

Ausgabe:

Before: &{filled}
After: <nil>

Der Einfachheit halber wird jedoch empfohlen, Null direkt zuzuweisen, um einen Zeiger zu annullieren:

<code class="go">i = nil
typ = nil</code>

Das obige ist der detaillierte Inhalt vonWie macht man eine Schnittstelle in Golang ungültig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn