はじめに
この記事はYamato Advent Calendar 2023 4日目の記事です。
今回は12/3(日)に神戸で開催されたGo! Kobe!に参加してきたのでまとめようと思います。
概要
@tenntennさんが主催するGoのハンズオンイベントです。
↓ ハンズオンの資料です
ハンズオン
ハンズオンはステップアップ式にOpenAIを活用したChat Botを作成するというものでした。
普段Goをかじってはいるので、内容は比較的簡単に感じました。
が、このハンズオンを通して、学んだこともたくさんあったので、まとめたいと思います。
- text/templateパッケージの使い方
- embedの使い方
- https://pkg.go.dev が最強
- ディレクトリ構成 https://go.dev/doc/modules/layout
- Goの命名 https://google.github.io/styleguide/go/guide#naming
特に、text/templateとembedパッケージは使用したことがありませんでした。
ということで、この二つのパッケージを使って何か作ってみます。
作りました。htmlのtemplateファイルをembedで読み込みホストするだけのWebサーバーです。
HTMLのテンプレートは以下のようになっています。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Golang Template Server</title>
</head>
<body>
<h1>名前:{{.Name}}</h1>
<h2>年齢:{{.Age}}</h2>
</body>
</html><!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Golang Template Server</title>
</head>
<body>
<h1>名前:{{.Name}}</h1>
<h2>年齢:{{.Age}}</h2>
</body>
</html>
{{.Name}}と{{.Age}}の部分に値を埋め込みます。
go run cmd/main.go
で実行してみます。flagパッケージを使用しているため、portの指定も可能です。
go run cmd/main.go --port 9000
デフォルトでは8080ポートで起動します。
locahost:8080にアクセスしてみると,
このように簡単なHTMLが描画されます。
また、localhost:8080/selfにクエリパラメータで「name」と「age」を渡してあげると、動的にHTMLを書き換えることができます。
試しにlocalhost:8080/self?name=hoge&age=20としてアクセスすると以下のようになります。
text/templateパッケージを使って、HTMLのテンプレートを使用することができました。
embedパッケージを使用しているため、buildしてindex.htmlを消してもうまく動きます。
これは、ビルド時に静的なファイルを読んでくれ、ビルドされたバイナリに埋め込まれるからなんですね。こんなパッケージがあるのは初めて知りました。ありがたや
感想
GoのパッケージやGoの設計思想、pkg.go.devなどたくさん深掘りをすることができたハンズオンでした。ありがとうございました!
終わりに
Goについて知らないことだらけなので、もっと精進します。
明日のYamato Advent Calendar 2023は特に決めてませんが、何か書きます。お楽しみに!