0Pricing
Go Academy · レッスン

パッケージ:Goコードの整理

パッケージ宣言、インポート、エクスポートされた名前

「パッケージ:Goコードの整理」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

パッケージとは

Goのすべてのソースファイルはパッケージに属します。パッケージ名はすべてのファイルの先頭に記述します。パッケージは関連するコードをまとめ、可視性を制御します:

// file: math/calc.go
package math

// Exported — accessible from other packages (capital letter)
func Add(a, b int) int { return a + b }

// Unexported — package-private (lowercase)
func helper() int { return 42 }

パッケージ宣言とインポートパス

パッケージ名(短い名前)とインポートパス(完全なモジュールパス/ディレクトリ)は異なります:

// Import path: github.com/myapp/util/stringutil
// Package name: stringutil (last segment by convention)
package stringutil

func Reverse(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}

パッケージのインポート

他のパッケージを取り込むにはimportを使用します。Goでは、すべてのインポートを使用する必要があります:

package main

import (
    "fmt"                         // standard library
    "strings"                     // standard library
    "github.com/myapp/util/math"  // third-party or local
)

func main() {
    fmt.Println(strings.ToUpper("hello"))
    fmt.Println(math.Add(1, 2))
}

エクスポートされた識別子とエクスポートされていない識別子

大文字で始まる識別子はエクスポートされた識別子(public)です。小文字で始まる識別子はエクスポートされていない識別子(package-private)です:

package server

// Exported: accessible from other packages
type Server struct {
    Addr    string   // exported field
    timeout int      // unexported field
}

// Exported method
func (s *Server) Start() error { return nil }

// Unexported helper
func (s *Server) listen() {}

package main と func main

mainパッケージは特別で、実行可能ファイルを定義します。main関数がエントリーポイントです:

package main

import "fmt"

func main() {
    fmt.Println("Hello, Go!")
    // Program starts here and ends here
}

// All other packages are libraries — no main() needed

init() 関数

各パッケージには1つ以上のinit()関数を定義できます。これらは自動的に、宣言された順序でmain()より前に実行されます:

package config

import "fmt"

var DB string

func init() {
    DB = "localhost:5432/mydb"
    fmt.Println("config package initialized")
}

// init runs once when the package is first imported
// Multiple init() functions per file/package are allowed

副作用のためのブランクインポート

ブランク識別子を使用すると、init()の副作用だけを目的にパッケージをインポートできます:

package main

import (
    "database/sql"
    _ "github.com/lib/pq"  // registers PostgreSQL driver via init()
)

func main() {
    db, err := sql.Open("postgres", "host=localhost dbname=test")
    _ = db
    _ = err
}

エイリアス付きインポート

名前の衝突を避けたり、名前を短くしたりするために、インポート時にパッケージ名を変更できます:

package main

import (
    "fmt"
    gomath "math"              // alias to avoid collision
    mymath "github.com/me/math"
)

func main() {
    fmt.Println(gomath.Sqrt(16))     // 4
    fmt.Println(mymath.Add(1, 2))    // 3
}

パッケージの命名規則

Goのパッケージには、次の命名規則があります:

  • 短く、小文字のみの1語にします:http、json、fmt
  • ディレクトリ名と一致させます:util/stringutil/ → パッケージstringutil
  • パッケージ名にアンダースコアやcamelCaseは使用しません
  • util、common、helperのような一般的すぎる名前は避けます
  • パッケージ名は識別子の一部です。httplib.HTTPClientよりhttp.Clientを優先します

循環インポート

Goでは循環インポートは許可されていません。BがAをインポートしている場合、パッケージAはBをインポートできません。共有コードを3つ目のパッケージに切り出して解決します:

// WRONG: A imports B, B imports A — compile error
// package a imports "myapp/b"
// package b imports "myapp/a"

// SOLUTION: extract shared types to package c
// package a imports "myapp/c"
// package b imports "myapp/c"
// No circular dependency

クイックチェック

Goで識別子がエクスポートされる条件は何ですか?

まとめ:パッケージ

パッケージの主な概念:

  • すべてのファイルはpackage nameで始まります
  • 大文字はエクスポート済み(public)、小文字はエクスポートされていない(package-private)ことを表します
  • 完全なパスでインポートし、短いパッケージ名で使用します
  • init()はmain()より前に自動的に実行されます
  • 副作用だけを目的とする場合はブランクインポート_ "pkg"を使用します
  • 循環インポートは許可されていません

よくある質問

「パッケージ:Goコードの整理」レッスンは無料ですか?

はい。「パッケージ:Goコードの整理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「パッケージ:Goコードの整理」で何を学びますか?

パッケージ宣言、インポート、エクスポートされた名前 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「パッケージ:Goコードの整理」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. パッケージ:Goコードの整理
  2. go modによるGo Modules
  3. 外部依存関係の追加
  4. 内部パッケージとワークスペース
← Go Academyに戻る