Menu
Coddy logo textTech

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

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    // 非公開 - パッケージ内のみ
}

この命名規則は、他の言語で見られる publicprivate のようなアクセス修飾子に代わるものです。

// 大文字 = エクスポートされる (public)
// 小文字 = エクスポートされない (private)

func SaveData() {}  // エクスポートされる
func loadData() {}  // エクスポートされない

Goにおいて、この慣習に従うことは不可欠です。他のパッケージがあなたのコードをインポートするとき、大文字で始まる名前のみにアクセスできます。

challenge icon

チャレンジ

中級

product.go 内のすべての名前を、Go のエクスポート(公開)名の命名規則に従うように修正してください。以下の最初の文字を大文字にします:

  • 構造体名:productProduct
  • すべてのフィールド名:namepricestock
  • すべての関数名:totalValuedisplayInfo
  • 関数内のすべてのフィールド参照

チートシート

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    // 非エクスポート - パッケージ内のみ
}

この命名規則は、他の言語で見られる publicprivate といったアクセス修飾子に代わるものです。

自分で試してみよう

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腕試し

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

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