HTTPサーバーの作成
ListenAndServe、HandlerFunc、ServeMux
「HTTPサーバーの作成」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
net/http パッケージ
Go の標準ライブラリである net/http は、外部依存なしで本番運用に対応できる HTTP/1.1 および HTTP/2 サーバーを提供します。
基本的なサーバー
http.HandleFunc でハンドラーを登録し、http.ListenAndServe でリッスンを開始します。
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))http.Handler インターフェース
ServeHTTP(ResponseWriter, *Request) を実装する型はすべて http.Handler です。データベースや設定を保持する状態付きハンドラーに使用します。
type App struct{ db *sql.DB }
func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// use a.db
}ServeMux
http.NewServeMux() は分離されたルーターを作成します。グローバルなデフォルト mux の使用を避けるために、http.ListenAndServe に渡します(ライブラリではより安全です)。
mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)ステータスコードの返却
本文を書き込む前に、w.WriteHeader(code) でステータスコードを書き込みます。w.Write だけを呼び出した場合、ステータスはデフォルトで 200 になります。
w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))JSON レスポンスの書き込み
本文を書き込む前に Content-Type を設定し、その後 json.Encoder でエンコードします。
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)リクエストの読み取り
*Request 構造体を通じて、メソッド、URL、ヘッダー、クエリパラメーター、本文にアクセスできます。
r.Method // "GET", "POST", ...
r.URL.Path // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")JSON リクエスト本文の解析
json.Decoder でリクエスト本文をデコードします。メモリ枯渇を防ぐには、http.MaxBytesReader で本文のサイズを制限します。
r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)サーバー設定
カスタム http.Server でタイムアウトを設定し、低速なクライアントによる攻撃を防ぎます。
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
srv.ListenAndServe()HTTPS
srv.ListenAndServeTLS(certFile, keyFile) を使用して HTTPS を提供します。証明書には自己署名証明書(開発環境)や、Let's Encrypt の証明書(golang.org/x/crypto/acme/autocert を使用する本番環境)を使用できます。
ハンドラーの合成
ハンドラーをラップすると、ビジネスロジックを変更せずに、横断的関心事(ロギング、認証、リカバリ)を追加できます。変更後の次のハンドラーを返します。
確認問題
http.Server に ReadTimeout と WriteTimeout を設定する必要があるのはなぜですか。
まとめ:HTTP サーバーの作成
重要なポイント:
- 単純なサーバーには HandleFunc と ListenAndServe を使用します
- 本番環境ではタイムアウトを設定したカスタム http.Server を使用します
- 分離されたルーティングには ServeMux を使用します
- JSON レスポンスには json.NewEncoder(w) を使用します
よくある質問
「HTTPサーバーの作成」レッスンは無料ですか?
はい。「HTTPサーバーの作成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「HTTPサーバーの作成」で何を学びますか?
ListenAndServe、HandlerFunc、ServeMux ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「HTTPサーバーの作成」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- HTTPサーバーの作成
- ルーティングとパスパラメーター
- ミドルウェアパターン
- グレースフルシャットダウン