Goプログラミング実践入門
TOC
I Go言語とWebアプリケーションの親和性
Go言語はWebアプリ開発に最適な言語
Goプログラム「ChitChat」
II Webアプリ開発の基本テクニック
net/httpライブラリをつかったリクエストの受付
net/httpライブラリ
サーバ
ハンドラとハンドラ関数 http.Handler http.HandlerFunc
リクエストのデータ構造とその処理
リクエストとレスポンス
HTMLフォームとGo言語
ResponseWriter
クッキー
テンプレートエンジンを使ったコンテンツの表示
テンプレートとテンプレートエンジン
Go言語のテンプレートエンジン
アクション
引数、変数、パイプライン
関数
コンテキスト依存処理
テンプレートの入れ子
ブロックアクションによるデフォルトテンプレートの定義
データの記憶 構造体、ファイル、データベース
メモリ内での保持
ファイルによる保存
Go言語とSQL
Go言語とSQLによるリレーション
Go言語のリレーショナルマッパー
III リアルな開発への準備
GoによるWebサービスの生成 XML及びJSONの生成と解析
Webサービス入門
SOAPベースのWebサービス
RESTベースのWebサービス
Go言語によるXML
Go言語によるJSON
Go Webサービスの作成
テスト用ライブラリを使ったアプリケーションのテスト
Goとテスト
Goによるユニットテスト
GoによるHTTPのテスト
テストダブルと依存性の注入
サードパーティ製のテスト用Goライブラリ
ゴルーチンとチャネルを使った並行処理
並行性と並列性
ゴルーチン
チャネル
Webアプリケーションと並行実行
Go Webアプリのデプロイ Heroku, GAE, Docker
サーバへのデプロイ
Herokuへのデプロイ
Google App Engineへのデプロイ
Dockerへのデプロイ
デプロイ方法の比較
メモ
2章
永続化データはパッケージdataで管理している
CookieにUUIDを持たせて永続化されたSessionと比較することでログイン状態を判定する
http.templateという標準パッケージがあってHTMLの動的生成を担っている
http.Template.Executeでio.Writerに生成結果を書き込むことができる
このサンプルではdataパッケージのinit関数でsql.Openを呼び出してパッケージ変数でDB接続を持つようにしている
sql.DB sql.Open DB.Query を使った
まとめ
Webアプリケーションはリクエストを受信して処理するもの
マルチプレクサはリクエストを所定のハンドラにリクエストして処理させる
静的ファイルも含まれる
ハンドラ関数はResponseWriterとRequestへのポインタを引数にとるGoの関数である
クッキーはアクセスコントロールの仕組みに使うことができる
HTMLレスポンスは、テンプレートファイルを解析してデータと組み合わせることで生成される
データをRDBに保存するには、パッケージsqlを使ってSQLを実行する
3章
基盤となっている標準ライブラリ
html/template 6章
Server.ListenAndServeTLSに、次の2つを渡す
SSL証明書
秘密鍵
生成するにはcryptoが使える
ハンドラとハンドラ関数
http.Handleはデフォルトマルチプレクサにハンドラを追加する
パスによって異なるハンドラを使いたいのが普通だからマルチプレクサが存在する
まとめ
net/httpとhtml/templateがある
フレームワークを利用する前に基本を学ぼう
net/httpを使えばSSL/TLSの上にHTTPを載せてHTTPSで安全に通信できる
GoのハンドラとはServeHTTPを実装する構造体のこと
ハンドラ関数とはServeHTTPと同じシグネチャの関数のこと
マルチプレクサ自体もハンドラである
G1.6以降ではデフォルトでHTTP/2をサポートしている
4章
HTMLフォームとGo言語
HTMLフォームによるPOSTリクエストはどのような形式でBodyを設定するのか?
名前と値のペアの形式はenctype属性で指定する
デフォルト値はapplication/x-www-form-urlencoded
multipart/form-dataやtext/plainもブラウザでサポートされる
通常はこれらをparseしなくてもnet/httpの関数で値を読み取れる
Goによるフォームデータの取り出し
ParseForm ParseMultipartFormを呼び出してリクエストを解析する
Form PostForm MultipartFormから取得する
まとめ
Goはリクエストを表す構造体(リクエストパーツを表す構造体を含む)を提供しているのでリクエストからデータを取り出すのに使える
RequestにはFrom, PostForm, MultipartFormがある。これらを取り出すにはParseFormやParseMultipartFormを使う
FormはURLとHTMLフォームのURLエンコードされたデータに使う
PostFormはHTMLフォームのURLエンコードされたデータにのみ使う
MultipartFormはHTMLフォームのマルチパートデータ(ファイルアップロードとか)に使う
ResponseWriterにデータを書き込むとレスポンスボディに書き込むことでクライアントにデータを送り返せる
クライアント側でデータを保持する方法としてクッキー送信がある
クッキーをうまく使うとフラッシュメッセージが作れる
5章
テンプレートエンジンの両極端
ロジックなし
ロジック埋め込み