メインコンテンツまでスキップ

Go

Goは、Googleが開発したシンプルで高速な言語です。APIサーバー、マイクロサービス、クラウドインフラ、ネットワーク処理など、Webサービスの裏側でよく使われます。

何ができる?

  • 高速なAPIサーバーを作る
  • 並行処理を扱う
  • クラウドやインフラ系ツールを作る
  • 小さく配布しやすいコマンドラインツールを作る
  • マイクロサービスを作る

学習ゴール

  • Goの基本構造を読める
  • 変数、条件分岐、繰り返し、関数を書ける
  • 構造体を使える
  • goroutineの役割をざっくり説明できる
  • Goがサーバー開発で使われる理由を理解できる

開発環境の準備

必要なもの役割
Goコンパイルと実行
VS CodeGo拡張機能で書きやすくする
gofmtコードを自動整形する
Dockerサーバー開発の環境を揃える

Goでは gofmt によってコードの書き方が揃いやすいのが特徴です。

基本構造

package main

import "fmt"

func main() {
fmt.Println("こんにちは、Go")
}

package mainfunc main() が、実行するプログラムの基本形です。

変数と条件分岐

score := 85

if score >= 80 {
fmt.Println("よくできました")
} else {
fmt.Println("もう少し練習しよう")
}

:= を使うと、型を推測して変数を作れます。

スライス

languages := []string{"Go", "Docker", "SQL"}

for _, language := range languages {
fmt.Println(language)
}

スライスは、よく使う可変長のリストです。

構造体

type User struct {
Name string
Age int
}

user := User{Name: "太郎", Age: 15}
fmt.Println(user.Name)

構造体を使うと、関連するデータをまとめて扱えます。

goroutine

go func() {
fmt.Println("別の処理を実行")
}()

goroutineは、軽量な並行処理の仕組みです。大量の通信や複数の処理を扱うサーバー開発で役立ちます。

フレームワーク・関連技術

技術できること
net/http標準ライブラリでHTTPサーバーを作る
Gin軽量なWeb APIを作る
EchoWeb APIを作る
DockerGoアプリをコンテナ化する
Kubernetesコンテナを運用する

ミニ演習: HTTPサーバー

package main

import (
"fmt"
"net/http"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, Go server")
})

http.ListenAndServe(":8080", nil)
}

ブラウザで http://localhost:8080 を開くと、文字が表示されます。

よくあるエラーと直し方

困ったこと原因の例確認すること
使っていない変数でエラーGoは未使用を許さない不要な変数を消す
importエラー未使用または不足import一覧
ポートが使えない既に起動中ポート番号
JSONが返らないヘッダー設定不足Content-Type
並行処理が難しいgoroutineの終了タイミングchannelやWaitGroup

チェックリスト

  • go run で実行できる
  • fmt.Println を使える
  • スライスを使える
  • 構造体を作れる
  • HTTPサーバーの基本を読める
  • goroutineの役割を説明できる

次に学ぶこと

Goに慣れたら、HTTP API、JSON、SQL、Dockerを組み合わせて小さなサーバーを作ってみましょう。クラウドやインフラに進むならKubernetesにも触れると理解が広がります。