以下の構成で「Go言語 入門編」を作るのがよいです。
Go言語 入門編
- 全体像
Goは、次の用途に向いています。
| 用途 | g向き不向き |
|---|---|
| CLIツール | g◎ |
| Web API | g◎ |
| 並行処理 | g◎ |
| CSV/JSON処理 | g◎ |
| サーバープログラム | g◎ |
| GUIアプリ | g△ |
| DataFrame処理 | g△〜○ |
公式ドキュメントでは、標準ライブラリとGoツール群がかなり重視されています。まずは外部パッケージより、fmt、os、io、bufio、encoding/csv、encoding/json、net/http、database/sql あたりを覚えるのが定石です。
⸻
第1章 環境構築編¶
1. Goのインストール¶
Ubuntu 24なら、まずはこれで十分です。
Ubuntu公式ドキュメントでも sudo apt install golang-go が案内されています。
最新版を使いたい場合は、Go公式のインストール手順に従って /usr/local/go に入れる方法もあります。
2. PATH設定¶
~/.bashrc に追加します。
反映します。
3. 開発用ツール¶
確認します。
4. 最初のプロジェクト¶
mkdir -p ~/Documents/go/hello
cd ~/Documents/go/hello
go mod init example.com/hello
main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Go")
}
実行。
ビルド。
⸻
第2章 Neovim設定編¶
最低限ほしいものはこれです。
| 機能 | gツール |
|---|---|
| 補完・定義ジャンプ | ggopls |
| 自動整形 | ggofmt / goimports |
| import整理 | ggoimports |
| 静的解析 | ggolangci-lint |
golangci-lint は、多数のGo向けlinterをまとめて実行できるツールです。公式にも高速なGo linter runnerとして説明されています。
インストール例。
確認。⸻
第3章 基本文法編¶
まず覚える順番はこれです。
1. 変数¶
package main
import "fmt"
func main() {
name := "yossym"
age := 20
fmt.Println(name)
fmt.Println(age)
}
2. if¶
3. for¶
Goには基本的に while がありません。for を使います。
while風。
無限ループ。
4. 配列より slice¶
Goでは配列より slice をよく使います。
5. map¶
⸻
第4章 関数・エラー処理編¶
Goの定石は、
です。
例。
package main
import (
"fmt"
"os"
)
func main() {
data, err := os.ReadFile("sample.txt")
if err != nil {
fmt.Println("読み込みエラー:", err)
return
}
fmt.Println(string(data))
}
⸻
第5章 ファイル処理編¶
テキストファイル読み込み
package main
import (
"fmt"
"os"
)
func main() {
data, err := os.ReadFile("sample.txt")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(data))
}
1行ずつ読む
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("sample.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Println(err)
}
}
⸻
第6章 CSV編¶
あなたの場合、CSVを扱うことが多いと思うので重要です。
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
file, err := os.Open("sample.csv")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
reader := csv.NewReader(file)
records, err := reader.ReadAll()
if err != nil {
fmt.Println(err)
return
}
for _, row := range records {
fmt.Println(row)
}
}
大きいCSVなら ReadAll() は避けて、1行ずつ読みます。
⸻
第7章 JSON編¶
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
text := `{"name":"yossym","age":20}`
var user User
err := json.Unmarshal([]byte(text), &user)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(user.Name)
fmt.Println(user.Age)
}
⸻
第8章 構造体編¶
Goではクラスではなく struct を使います。
type User struct {
Name string
Age int
}
func main() {
user := User{
Name: "Tanaka",
Age: 30,
}
fmt.Println(user.Name)
}
メソッドも作れます。
⸻
第9章 並行処理編¶
Goの特徴です。
package main
import (
"fmt"
"time"
)
func main() {
go func() {
fmt.Println("goroutine")
}()
time.Sleep(time.Second)
}
チャンネル。
⸻
第10章 Web API編¶
標準ライブラリだけでWebサーバーを書けます。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello Web")
})
http.ListenAndServe(":8080", nil)
}
実行。
確認。
⸻第11章 便利パッケージ編¶
まず覚える標準ライブラリ
| パッケージ | 用途 |
|---|---|
| fmt | 表示 |
| os | ファイル・環境変数 |
| io | 入出力 |
| bufio | 1行ずつ読む |
| strings | 文字列処理 |
| strconv | 文字列と数値変換 |
| time | 日付時刻 |
| encoding/csv | CSV |
| encoding/json | JSON |
| net/http | Web |
| database/sql | DB |
外部パッケージ
| パッケージ | 用途 |
|---|---|
| github.com/spf13/cobra | CLIコマンド作成 |
| github.com/spf13/viper | 設定ファイル |
| github.com/gin-gonic/gin | Web API |
| github.com/jmoiron/sqlx | DB操作 |
| github.com/joho/godotenv | .env 読み込み |
| github.com/rs/zerolog | ログ |
| github.com/stretchr/testify | テスト補助 |
⸻
第12章 Goの定石編¶
1. 必ず go fmt¶
Goはフォーマットを人間が悩まず、gofmt に任せる文化です。公式の Effective Go でも、フォーマットは機械に任せる考え方が説明されています。
2. import整理は goimports¶
3. 小さく作る¶
Goでは、まずこれくらいの構成で十分です。
少し大きくなったら。
さらに大きくなったら。
myapp/
├── go.mod
├── cmd/
│ └── myapp/
│ └── main.go
├── internal/
│ ├── config/
│ ├── csvutil/
│ └── server/
└── README.md
4. エラーは握りつぶさない¶
- 悪い例。
- 良い例。
5. 大きいCSVは一括読み込みしない¶
-
悪い例。
-
良い例。
⸻
おすすめ学習順
- 環境構築
- go run / go build / go mod
- 変数・if・for・slice・map
- 関数
- エラー処理
- struct
- ファイル読み書き
- CSV
- JSON
- Web API
- goroutine / channel
- DB / DuckDB / SQLite
まずは次に、
「Go言語 入門編 第1章:Ubuntu 24で環境構築」
として、コマンドを上から順番に実行できる形で作るのがよいと思います。