公開された名前と非公開の名前
CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 4/107。
Goでは、名前の最初の文字がその可視性を決定します。大文字で始まる名前はエクスポートされます(他のパッケージからアクセス可能です)。小文字で始まる名前はエクスポートされません(パッケージに対してプライベートです)。
エクスポートされた名前 — パッケージ外から参照可能
type User struct {
Name string // エクスポートされたフィールド
Email string // エクスポートされたフィールド
}
func CreateUser(name string) User { // エクスポートされた関数
return User{Name: name}
}エクスポートされていない名前 — パッケージ内でのみ参照可能
type secret struct { // エクスポートされていない構造体
password string // エクスポートされていないフィールド
}
func validate() bool { // エクスポートされていない関数
return true
}混合 — 一部の非公開フィールドを持つ公開構造体
type Account struct {
Username string // 公開 - どこからでもアクセス可能
Email string // 公開 - どこからでもアクセス可能
password string // 非公開 - パッケージ内のみ
}この命名規則は、他の言語で見られる public や private のようなアクセス修飾子に代わるものです。
// 大文字 = エクスポートされる (public)
// 小文字 = エクスポートされない (private)
func SaveData() {} // エクスポートされる
func loadData() {} // エクスポートされないGoにおいて、この慣習に従うことは不可欠です。他のパッケージがあなたのコードをインポートするとき、大文字で始まる名前のみにアクセスできます。
チャレンジ
中級product.go 内のすべての名前を、Go のエクスポート(公開)名の命名規則に従うように修正してください。以下の最初の文字を大文字にします:
- 構造体名:
product→Product - すべてのフィールド名:
name、price、stock - すべての関数名:
totalValue、displayInfo - 関数内のすべてのフィールド参照
チートシート
Goでは、名前の最初の文字がその可視性を決定します:
- 大文字 = エクスポート(他のパッケージからアクセス可能)
- 小文字 = 非エクスポート(パッケージ内のみでプライベート)
エクスポートされる名前:
type User struct {
Name string // エクスポートされたフィールド
Email string // エクスポートされたフィールド
}
func CreateUser(name string) User { // エクスポートされた関数
return User{Name: name}
}非エクスポートの名前:
type secret struct { // 非エクスポートの構造体
password string // 非エクスポートのフィールド
}
func validate() bool { // 非エクスポートの関数
return true
}混合された可視性:
type Account struct {
Username string // エクスポート - どこからでもアクセス可能
Email string // エクスポート - どこからでもアクセス可能
password string // 非エクスポート - パッケージ内のみ
}この命名規則は、他の言語で見られる public や private といったアクセス修飾子に代わるものです。
自分で試してみよう
package main
import "fmt"
func main() {
var name string
var price float64
var stock int
fmt.Scan(&name, &price, &stock)
p := Product{
Name: name,
Price: price,
Stock: stock,
}
fmt.Println(DisplayInfo(p))
fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
1Go オブジェクト指向の基礎
外部ファイルGo ワークスペースとモジュールパッケージとインポート公開された名前と非公開の名前Go におけるオブジェクト指向入門クラスとしての構造体構造体へのメソッド定義ポインタレシーバと値レシーバ構造体の初期化コンストラクタ関数まとめ:簡易計算機8エラー処理とOOP
error インターフェースカスタムエラー型エラーラッピング (fmt.Errorf)センチネルエラーerrors.Is() と errors.As()Panic、Defer、Recover復習 - ファイルパーサー