首頁  >  文章  >  後端開發  >  如何使 Golang 中的介面無效?

如何使 Golang 中的介面無效?

Susan Sarandon
Susan Sarandon原創
2024-11-01 21:11:02244瀏覽

How do you nullify an interface in Golang?

在Golang 中取消介面

問題:

嘗試取消的內部值要求了一個問題:如何實作這樣一個函式setNil(typ interface{})?

答案:

要有效地使介面失效,至關重要的是請記住,使用指標值與使用介面值不同。由於指標是透過引用傳遞的,因此必須傳遞指向介面的指標才能修改其內部狀態。

介面無效函數{}:

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

用法:

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

輸出:

Before: Bob
After: <nil>

輸出:

輸出:。 🎜>

<code class="go">func setNilPtr(p unsafe.Pointer) {
    *(**int)(p) = nil
}</code>
指標無效函數(Unsafe.Pointer):

要使指標無效,可以將其轉換為

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

Before: &{filled}
After: <nil>

用法:

輸出:

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

指針無效函數(>

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

Before: &{filled}
After: <nil>
但是,為了簡單起見,建議直接賦值nil 來使指標無效:

以上是如何使 Golang 中的介面無效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn