ホームページ > バックエンド開発 > Golang > 記事の本質を捉えた、質問ベースのタイトルをいくつか紹介します。 * Golang でインターフェイスまたはポインタを Nil に設定するにはどうすればよいですか? * Golang Nil の割り当て: インターフェイスとポインター: 何が違うのか

記事の本質を捉えた、質問ベースのタイトルをいくつか紹介します。 * Golang でインターフェイスまたはポインタを Nil に設定するにはどうすればよいですか? * Golang Nil の割り当て: インターフェイスとポインター: 何が違うのか

Linda Hamilton
リリース: 2024-10-27 06:46:02
オリジナル
1139 人が閲覧しました

Here are a few question-based titles that capture the essence of your article:

* How do I Set an Interface or Pointer to Nil in Golang? 
* Golang Nil Assignment: Interfaces vs. Pointers: What's the Difference?
* Zeroing Out in Golang: A Deep Dive into S

Golang でインターフェイスまたはポインタを nil に設定する方法

Golang では、インターフェイス値を nil に設定するのは予想ほど簡単ではない場合があります。この記事では、さまざまなシナリオでインターフェイスとポインターを nil に設定する方法について説明します。

インターフェイスを Nil に設定する

インターフェイス値、特に次の値を保持するインターフェイスを扱う場合具象型の場合、正しいアプローチは、インターフェイス値自体ではなくインターフェイスへのポインターを渡すことです。インターフェイスを nil に設定するには、次のようなインターフェイス ポインターを受け入れる関数を使用します。

<code class="go">func setNilIf(v *interface{}) {
    *v = nil
}</code>
ログイン後にコピー

例:

<code class="go">var i interface{} = "Bob"
setNilIf(&i)
fmt.Println(i) // Prints <nil></code>
ログイン後にコピー

ポインターを Nil に設定する

ポインター値の設定を解除するには、もう少し手間がかかります。ポインタは本質的にメモリ アドレスであるため、実際に値を変更するにはポインタを逆参照する必要があります。 unsafe.Pointer を直接逆参照できないため、これにより問題が発生します。これを解決するには、次の関数を使用します。

<code class="go">func setNilPtr(p unsafe.Pointer) {
    *(**int)(p) = nil
}</code>
ログイン後にコピー

例:

<code class="go">typ := &TYP{InternalState: "filled"}
fmt.Println(typ) // Prints &{filled}
setNilPtr(unsafe.Pointer(&typ))
fmt.Println(typ) // Prints <nil></code>
ログイン後にコピー

注: 簡単にするために、この例では int を次のように使用します。逆参照のターゲットの型。任意のポインタ タイプをターゲットとして使用できます。

または、リフレクションを使用してポインタを 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.Println(typ2) // Prints &{filled}
setNilPtr2(typ2)
fmt.Println(typ2) // Prints <nil></code>
ログイン後にコピー

ベスト プラクティス

上記の手法ではインターフェイスとポインターを nil に設定する方法が提供されていますが、単純に値に nil を割り当てるという慣用的なアプローチを使用するのが最善です。例:

<code class="go">// Set interface to nil
i = nil

// Set pointer to nil
typ = nil</code>
ログイン後にコピー

以上が記事の本質を捉えた、質問ベースのタイトルをいくつか紹介します。 * Golang でインターフェイスまたはポインタを Nil に設定するにはどうすればよいですか? * Golang Nil の割り当て: インターフェイスとポインター: 何が違うのかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート