プログラマー VTuber 衣亥栖ティオのちょっとした話

Youtubeに投稿したプログラミング学習動画の補足説明をするためのブログです。

プログラマーへの道 #65 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

前回からの差分は以下のURLから検索することができます。 "プログラマーへの道" の動画番号を "Filters" に追加して検索してください。

https://github.com/tio-iis/memo-server/pulls?q=is%3Apr+is%3Aclosed

f:id:iis_tio:20211204143415j:plain:w300

全体は以下のURLのタグ検索機能で確認することができます。 "プログラマーへの道" の動画番号を "Find a tag" に指定して検索してください。

https://github.com/tio-iis/memo-server

f:id:iis_tio:20211204143619j:plain:w300

戻り値を複数返すことができる

動画でも紹介しましたが、Goは戻り値を複数返すことができます。

https://qiita.com/high5/items/4e2580241039c950e1c4#%E9%96%A2%E6%95%B0%E3%81%AF%E8%A4%87%E6%95%B0%E3%81%AE%E6%88%BB%E3%82%8A%E5%80%A4%E3%82%92%E3%82%82%E3%81%A4%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B

エラーハンドリング

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() についての説明は以下です。

https://pkg.go.dev/log#Fatal

log.Fatal() は実行時に引数に渡された値を出力しますが、そのあとにプログラムを終了してしまいます。

https://qiita.com/ryokky59/items/19fa212d1898dcb4bcfd

今回のバックエンドサーバでは index.html を読み込めない場合に log.Fatal() を実行していますが、 これは index.html を読み込めない場合はバックエンドサーバは起動する意味がないからです。 起動せずに失敗を通知するべきなので、log.Fatal() を利用しているんですね。