パッケージ内の構造体のプライベート フィールドとメソッドを作成できません
質問:
構造体のフィールドとメソッドを Go パッケージ内でプライベートとして設定し、次のユーザーのみがアクセスできるようにすることはできますか?その構造体のメンバーではなく、他のパッケージ関数や外部コードによるものではありませんか?
コンテキスト:
次のコード スニペットを考えてみましょう:
package mypackage type mytype struct { size string hash uint32 } func (r *mytype) doPrivate() string { return r.size } func (r *mytype) Do() string { return doPrivate("dsdsd") }
この場合、サイズ、ハッシュ フィールド、および doPrivate メソッドは mytype 内にカプセル化され、他のユーザーからアクセスできないようにする必要があります。
答え:
Go では大文字小文字に基づいて識別子をエクスポートまたは非表示にすることができますが、プライベート クラス メンバーやデータの隠蔽の概念は、Go には存在しません。
慣例により、エクスポートされた識別子 (大文字で初期化) はパッケージ内での公開使用を目的としています。逆に、エクスポートされていない識別子 (小文字で初期化されている) は、そのパッケージ内でのアクセスが制限されています。
ただし、特定のパッケージ内では、そのパッケージ スコープを超えて構造体メンバーへのアクセスをさらに制限する方法はありません。データのカプセル化を実現するために推奨されるアプローチは、構造体全体とその関連メソッドがそのパッケージ内で定義される唯一の要素である別個のパッケージを作成することです。
以上がGo パッケージで構造体のフィールドとメソッドをプライベートにできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。