go-common-code/readme/go_howto.md
2025-12-07 19:26:52 +09:00

244 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 の書き方」「ディレクトリ構成の例」なども知りたい場合は続けて作成できます。