公開された名前と非公開の名前
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のようなアクセス修飾子の代わりになります。
// 大文字 = エクスポートされる(公開)
// 小文字 = エクスポートされない(非公開)
func SaveData() {} // エクスポートされる
func loadData() {} // エクスポートされないGoでは、この規約に従うことが不可欠です。他のパッケージがあなたのコードをインポートするとき、アクセスできるのは大文字で始まる名前だけです。
チャレンジ
中級product.go 内のすべての名前を、Go のエクスポートされた名前の規則に従うように修正してください。次の名前の最初の文字を大文字にします。
- 構造体名:
product→Product - すべてのフィールド名:
name、price、stock - すべての関数名:
totalValue、displayInfo - 関数内のすべてのフィールド参照
自分で試してみよう
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復習 - ファイルパーサー自分で練習してみよう: Goオンラインコンパイラ