カテゴリ: Go言語 更新日: 2026/02/19

Go言語でHTTPリクエストのタイムアウト設定を安全に行う方法|初心者向け完全ガイド

Go言語でHTTPリクエストのタイムアウト設定を安全に行う方法
Go言語でHTTPリクエストのタイムアウト設定を安全に行う方法

先生と生徒の会話形式で理解しよう

生徒

「Go言語でインターネット通信をするとき、ずっと待たされることがあるって聞いたんですが、本当ですか?」

先生

「あります。特にHTTP通信では、相手のサーバーが返事をしないと、プログラムが止まったままになることがあります。」

生徒

「それは困ります…。止まらないようにする方法はあるんですか?」

先生

「Go言語では、HTTPリクエストにタイムアウトを設定することで、安全に通信を制御できます。順番に見ていきましょう。」

1. HTTPリクエストとタイムアウトとは?

1. HTTPリクエストとタイムアウトとは?
1. HTTPリクエストとタイムアウトとは?

Go言語でAPI連携やネットワーク通信を行うときに使われるのがHTTPリクエストです。これは、ブラウザでWebサイトを見るときと同じ仕組みで、相手のサーバーに「情報をください」とお願いする動作です。

しかし、相手のサーバーが混んでいたり、ネットワークが不安定だったりすると、いつまでも返事が返ってこないことがあります。この「待てる最大時間」を決める仕組みがタイムアウトです。

タイムアウトを設定しないと、プログラムが止まったままになり、画面も動かず、エラーにも気づけません。初心者ほど、必ず設定しておきたい重要なポイントです。

2. タイムアウトを設定しないと起きる問題

2. タイムアウトを設定しないと起きる問題
2. タイムアウトを設定しないと起きる問題

タイムアウトがないHTTP通信は、電話をかけっぱなしで相手が出るまで永遠に待つ状態に似ています。相手が出なければ、こちらは何もできません。

Go言語のプログラムでも同じで、処理が止まり、次の処理に進めなくなります。WebサービスやAPI連携では、この状態が続くと、アプリ全体が動かなくなる原因になります。

そのため、Go言語でネットワーク通信を行うときは、「何秒待ってダメなら諦める」という判断をコードで書くことが大切です。

3. http.Getを使った基本的な通信の例

3. http.Getを使った基本的な通信の例
3. http.Getを使った基本的な通信の例

まずは、Go言語で一番シンプルなHTTP通信の例を見てみましょう。これは、指定したURLにアクセスする基本形です。


package main

import (
    "net/http"
)

func main() {
    http.Get("https://example.com")
}

このコードは短くて分かりやすいですが、実はタイムアウトが設定されていません。通信に時間がかかると、いつまでも待ち続けてしまいます。

4. http.Clientでタイムアウトを設定する方法

4. http.Clientでタイムアウトを設定する方法
4. http.Clientでタイムアウトを設定する方法

Go言語では、http.Clientという仕組みを使うことで、タイムアウトを簡単に設定できます。Clientは「通信の設定をまとめた箱」のようなものです。


package main

import (
    "net/http"
    "time"
)

func main() {
    client := &http.Client{
        Timeout: 5 * time.Second,
    }

    client.Get("https://example.com")
}

ここでは「5秒待って返事がなければ終了する」という意味になります。time.Secondは「1秒」を表すGo言語の部品です。

この方法は、初心者でも理解しやすく、安全なタイムアウト設定としてよく使われます。

5. タイムアウト時間はどれくらいが適切?

5. タイムアウト時間はどれくらいが適切?
5. タイムアウト時間はどれくらいが適切?

「何秒にすればいいのか分からない」という人も多いと思います。これは、用途によって変わります。

例えば、画面表示に使うAPIなら、3秒から5秒程度が一般的です。あまり長いと、利用者が「固まった」と感じてしまいます。

逆に、時間がかかっても問題ない処理なら、10秒以上にすることもあります。大切なのは、「待たせすぎない」意識を持つことです。

6. contextを使ったより安全なタイムアウト管理

6. contextを使ったより安全なタイムアウト管理
6. contextを使ったより安全なタイムアウト管理

Go言語には、contextという仕組みがあります。これは「この処理はここまで」という制限を伝えるための道具です。


package main

import (
    "context"
    "net/http"
    "time"
)

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
    defer cancel()

    req, _ := http.NewRequestWithContext(ctx, "GET", "https://example.com", nil)
    http.DefaultClient.Do(req)
}

この方法では、HTTP通信だけでなく、その周辺の処理もまとめて時間制限をかけられます。少し難しく見えますが、「3秒で終了する約束を作っている」と考えると理解しやすいです。

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

7. タイムアウト時のエラーを確認する考え方

7. タイムアウト時のエラーを確認する考え方
7. タイムアウト時のエラーを確認する考え方

タイムアウトが発生すると、Go言語ではエラーが返ってきます。これは「失敗」ではなく、「想定通りの結果」です。

エラーを正しく受け取り、「時間切れだった」と判断できれば、安全なプログラムになります。タイムアウトは、プログラムを守るための仕組みだと覚えておきましょう。


resp, err := http.Get("https://example.com")
if err != nil {
    println("通信に失敗しました")
    return
}
defer resp.Body.Close()

このように、エラーを確認する習慣をつけることが、Go言語でのAPI連携とネットワーク処理ではとても重要です。

関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのモジュール分割で生じるトラブルの解決方法を完全解説 初心者向けKotlinモジュール設計ガイド
New2
Kotlin
Kotlinで条件分岐をきれいに書く方法を完全解説!初心者でも読みやすいif文・when式の使い方
New3
Kotlin
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
New4
Go言語
Go言語のXSS・CSRF対策を理解しよう!Webアプリケーションのセキュリティ対策を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Kotlin
Kotlinのデータ取得とキャッシュ設計を初心者向けに完全解説!
No.6
Java&Spring記事人気No6
Kotlin
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Java&Spring記事人気No7
Go言語
Go言語の構造体タグ(jsonタグなど)の使い方と活用例を初心者向けにやさしく解説
No.8
Java&Spring記事人気No8
Kotlin
Kotlinのデータクラス(data class)とは?便利な特徴と使い方を初心者向けにやさしく解説!