プログラマーへの道 #65 の補足説明
こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。
動画内で実装したソースコードも載せています。
今回の動画で実装したソースコード
前回からの差分は以下のURLから検索することができます。 "プログラマーへの道" の動画番号を "Filters" に追加して検索してください。
https://github.com/tio-iis/memo-server/pulls?q=is%3Apr+is%3Aclosed
全体は以下のURLのタグ検索機能で確認することができます。 "プログラマーへの道" の動画番号を "Find a tag" に指定して検索してください。
https://github.com/tio-iis/memo-server
戻り値を複数返すことができる
動画でも紹介しましたが、Goは戻り値を複数返すことができます。
エラーハンドリング
Go言語は関数やメソッドを実行した際に結果とエラーを戻り値として返す文化があります。 そのため、処理が失敗する可能性のある関数やメソッドは戻り値としてエラーを返すようになっていますし、エラーは戻り値の最後に返すというのが一般的です。 以下に関数のリストがありますが、戻り値にエラー(error)を返すものがチラホラあったり、複数の戻り値を返す場合は一番最後がエラーになっているはずです。
https://pkg.go.dev/os#pkg-index
ファイル読み込み
ファイルの読み込みには ReadFile() を利用しています。
https://pkg.go.dev/os#ReadFile
データ型の変換について
index.html でファイルの内容を読み取ったあとに data 変数の型を string に変換しています。 これは data の型が byte 型の配列だからです。
func main() { fmt.Println("start") data, err := os.ReadFile("index.html") if err != nil { //ファイルが見つからない場合 log.Fatal(err) } //データを変換している htmlStr = string(data) http.HandleFunc("/", hanlder) http.ListenAndServe(":8080", nil) }
log.Fatal() について
log.Fatal() についての説明は以下です。
log.Fatal() は実行時に引数に渡された値を出力しますが、そのあとにプログラムを終了してしまいます。
https://qiita.com/ryokky59/items/19fa212d1898dcb4bcfd
今回のバックエンドサーバでは index.html を読み込めない場合に log.Fatal() を実行していますが、 これは index.html を読み込めない場合はバックエンドサーバは起動する意味がないからです。 起動せずに失敗を通知するべきなので、log.Fatal() を利用しているんですね。