From a4a53616ba0a752082353fa5f98719165e67d6d1 Mon Sep 17 00:00:00 2001 From: "ry.yamafuji" Date: Sun, 7 Dec 2025 19:26:52 +0900 Subject: [PATCH] =?UTF-8?q?Go=E8=A8=80=E8=AA=9E=E3=81=AB=E3=81=A4=E3=81=84?= =?UTF-8?q?=E3=81=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 ++- readme/go_howto.md | 243 +++++++++++++++++++++++++++++++++++++++++++ readme/go_install.md | 12 +++ src/hello.go | 11 ++ 4 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 readme/go_howto.md create mode 100644 readme/go_install.md create mode 100644 src/hello.go diff --git a/README.md b/README.md index a37f8f3..0aaaa36 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ # go-common-code -Go言語の共通モジュールを作成する \ No newline at end of file +Go言語の共通モジュールを作成する + + +## Go言語の特徴 + +* シンプルで学習コストが低い構造 +* コンパイル言語で高速 +* 並行処理を軽量に扱える (goroutine と channel) +* クロスコンパイルが容易 (Linux, Windows, macOS などへ簡単に出力可能) +* 静的型付け + * クラスを持たず、構造体とメソッドでオブジェクト指向的な書き方ができる +* 標準ライブラリが強力で小さなバイナリにまとまる \ No newline at end of file diff --git a/readme/go_howto.md b/readme/go_howto.md new file mode 100644 index 0000000..bcfa99e --- /dev/null +++ b/readme/go_howto.md @@ -0,0 +1,243 @@ +# 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 の書き方」「ディレクトリ構成の例」なども知りたい場合は続けて作成できます。 diff --git a/readme/go_install.md b/readme/go_install.md new file mode 100644 index 0000000..a7f6767 --- /dev/null +++ b/readme/go_install.md @@ -0,0 +1,12 @@ +# Go言語をインストールする + +Macの場合 + +```sh +brew install go +go version + +# 環境変数を確認 +go env GOPATH +go env GOBIN +``` diff --git a/src/hello.go b/src/hello.go new file mode 100644 index 0000000..73a505e --- /dev/null +++ b/src/hello.go @@ -0,0 +1,11 @@ +// src/hello.go +// A simple Go program that prints "Hello, World!" to the console. +// go run src/hello.go +package main + +import "fmt" + +func main() { + fmt.Println("Hello, World!") +} +