# Go言語の書き方 ## Go言語の基本まとめ ## インポートと標準ライブラリ ファイルの先頭で必要なパッケージを import する。 ```go package main import ( "fmt" "time" ) ``` よく使う標準ライブラリ * fmt: 文字列表示、フォーマット * time: 日付、時間 * os: 環境変数、ファイル操作 * strings: 文字列操作 * net/http: HTTPサーバ、クライアント * io/ioutil または io: 入出力処理 --- ## 3. 基本構文 ### main 関数 ```go package main import "fmt" func main() { fmt.Println("hello") } ``` ### 変数宣言 ```go var a int = 10 b := 20 // 型推論 var s string = "text" ``` ### 定数 ```go const Pi = 3.14 ``` ### 関数定義 ```go func add(x int, y int) int { return x + y } ``` 返り値を複数返すことも可能 ```go func swap(a string, b string) (string, string) { return b, a } ``` --- ## 4. 分岐と繰り返し処理 ### if文 ```go if x > 10 { fmt.Println("big") } else if x == 10 { fmt.Println("equal") } else { fmt.Println("small") } ``` ### switch文 ```go switch n { case 1: fmt.Println("one") case 2, 3: fmt.Println("two or three") default: fmt.Println("other") } ``` ### for文 (Goの唯一のループ構文) ```go for i := 0; i < 5; i++ { fmt.Println(i) } ``` 条件のみ ```go for x < 10 { x++ } ``` 無限ループ ```go for { fmt.Println("loop") break } ``` --- ## 5. 配列、スライス、マップ ### 配列 固定長 ```go var arr [3]int = [3]int{1, 2, 3} ``` ### スライス 可変長配列 (Goではこちらが主に使われる) ```go nums := []int{1, 2, 3} nums = append(nums, 4) ``` ### マップ (オブジェクトのようなキーと値) ```go m := map[string]int{ "apple": 100, "banana": 200, } v := m["apple"] m["orange"] = 300 ``` ### for range ```go for key, value := range m { fmt.Println(key, value) } for index, value := range nums { fmt.Println(index, value) } ``` --- ## 6. 構造体とオブジェクト (Goはクラスを持たない) * Goには「クラス」も「継承」もない * 構造体だがメソッドを持てる * 「埋め込み(Embedding)」という仕組みで 継承に近いこと はできる ### 構造体 (class の代わり) ```go type User struct { Name string Age int } ``` インスタンス化 ```go u := User{Name: "Taro", Age: 20} fmt.Println(u.Name) ``` ### メソッド (構造体に紐づく関数) ```go func (u User) Greet() string { return "Hello " + u.Name } ``` 呼び出し ```go msg := u.Greet() fmt.Println(msg) ``` ### ポインタレシーバー (値を変更できる) ```go func (u *User) AddAge() { u.Age++ } ``` --- ## 7. インターフェース (GoのOOP的な仕組み) ```go type Greeter interface { Greet() string } ``` 構造体がメソッドを持てば自然に実装扱いになる ```go func greeting(g Greeter) { fmt.Println(g.Greet()) } greeting(u) ``` --- # 必要な要素をコンパクトにまとめた完全版です もし「Webサーバーの基本」「goroutine の書き方」「ディレクトリ構成の例」なども知りたい場合は続けて作成できます。