ホームページ > バックエンド開発 > Golang > コンストラクターはどうすれば Go 構造体の初期化を簡素化し、Nil ポインター パニックを回避できるでしょうか?

コンストラクターはどうすれば Go 構造体の初期化を簡素化し、Nil ポインター パニックを回避できるでしょうか?

Patricia Arquette
リリース: 2024-12-08 11:02:11
オリジナル
455 人が閲覧しました

How Can Constructors Simplify Go Struct Initialization and Avoid Nil Pointer Panics?

Go 構造体のメンバーを初期化するコンストラクター

Go を初めて使用する開発者は、構造体に関する初期化の課題に遭遇することがよくあります。次の点を考慮してください:

import "sync"

type SyncMap struct {
        lock *sync.RWMutex
        hm map[string]string
}
ログイン後にコピー

sm := new(SyncMap) でこの構造体をインスタンス化すると、残念ながら nil ポインターが原因でパニックが発生します。

ヘルパー関数を使用して nil ポインターを克服する

パニックを回避するための別のアプローチは、初期化:

func (m *SyncMap) Init() {
        m.hm = make(map[string]string)
        m.lock = new(sync.RWMutex)
}
ログイン後にコピー

構造体をインスタンス化した後、手動で Init を呼び出す必要があります。これにより定型コードが導入されます。

初期化を簡略化するためのコンストラクターの導入

より洗練された解決策は、コンストラクター関数を使用することです。次の例を考えてみましょう。

func NewSyncMap() *SyncMap {
    return &SyncMap{hm: make(map[string]string)}
}
ログイン後にコピー

この関数は、必要な構造体のメンバーを初期化し、初期化された構造体へのポインターを返します。使用法は簡単です:

sm := NewSyncMap()
sm.Put("Test", "Test")
ログイン後にコピー

複雑な構造用の拡張コンストラクター

より多くのメンバーを持つ構造体の場合、コンストラクターを拡張して、ゴルーチンの開始などの追加の初期化タスクを処理できます。またはファイナライザーの登録:

func NewSyncMap() *SyncMap {
    sm := SyncMap{
        hm: make(map[string]string),
        foo: "Bar",
    }

    runtime.SetFinalizer(sm, (*SyncMap).stop)

    go sm.backend()

    return &sm
}
ログイン後にコピー

コンストラクターを活用することで、Go 開発者は次のことができます。構造体の初期化を簡素化し、定型コードを排除し、コードベースの保守性と可読性を向上させます。

以上がコンストラクターはどうすれば Go 構造体の初期化を簡素化し、Nil ポインター パニックを回避できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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