Menu
CoddyTech

公開された名前と非公開の名前

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では、この規約に従うことが不可欠です。他のパッケージがあなたのコードをインポートするとき、アクセスできるのは大文字で始まる名前だけです。

challenge icon

チャレンジ

中級

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))
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Goオンラインコンパイラ