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