golang net/httpパッケージでHTTPサーバーの作る
今回はgolangのnet/httpパッケージについて解説していきます。
net/httpパッケージ
Go言語のnet/httpパッケージはHTTPクライアントとサーバーの機能を提供している標準ライブラリです。
net/httpを使用することでHTTPサーバーの作成、HTTPリクエストの送信、レスポンスの処理が可能になります。
net/httpの使い方
net/httpパッケージを使用してHTTPサーバーを立ち上げてみます。
package main
import (
"fmt"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, world!")
}
func main() {
http.HandleFunc("/hello", helloHandler)
http.ListenAndServe(":8080", nil)
}
上記コードのように書くことで/helloパスにアクセスがあった場合、helloHandler関数が呼び出され、"Hello, world!"というメッセージがブラウザに表示されます。
helloHandler関数はWebリクエストを処理するためのハンドラ関数で、この関数はhttp.ResponseWriterと*http.Requestの2つのパラメータを受け取っています。
http.ResponseWriterはクライアントへのレスポンスを書き込むためのインターフェースです。
今回はリクエストパラメータは特にありませんが、*http.Requestはクライアントからのリクエストの詳細です。
http.HandleFuncは特定のパスに対するリクエストがあった時に実行される関数を登録します。helloHandler関数が/helloのパスに対するリクエストを処理するように設定しています。
http.ListenAndServeはHTTPサーバを起動し、ポート8080で待機します。
net/httpではHTTPリクエストを送信し、レスポンスを受け取ることもできます。
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
response, err := http.Get("http://example.com")
if err != nil {
fmt.Println(err)
return
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
上記コードではhttp://example.comにHTTP GETリクエストを送信し、結果を表示しています。
http.Get関数を使用して指定されたURLにHTTP GETリクエストを送信します。戻り値はレスポンスとエラーになります。
ioutil.ReadAll関数ではレスポンスのボディを読み取り、[]byte型のスライスで返します。
net/httpの注意点
タイムアウトの設定
HTTPサーバーやクライアントはデフォルトでタイムアウトが設定されていないため、リソースの無駄遣いやDoS攻撃に対する脆弱性につながる可能性があります。
これを防ぐためにはタイムアウト値を適切に設定する必要があります。
ヘッダーの管理
サーバーやクライアントはTTPヘッダーを管理する必要がありますが、センシティブな情報をヘッダーに含めてはいけません。脆弱性を防ぐためにもセキュリティヘッダーを適切に設定する必要があります。
golangをもっと詳しくなりたい方に
初めてのGo言語
Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。
詳解Go言語Webアプリケーション開発
こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。
以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。
【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)
まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。
この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。
この記事が気に入ったらサポートをしてみませんか?