# 4 フォーム

フォームは我々が普段Webアプリケーションを書く時によく使うツールです。フォームを通して便利にユーザにサーバとデータをやり取りさせることができます。以前にWeb開発をしたことのあるユーザにとってはフォームはとてもお馴染みのものです。しかしC/C++のプログラマからすると、少々ばかり門外漢かもしれません。フォームとは一体何でしょうか？

フォームは表の要素を含むエリアです。フォームの要素はユーザがフォームの中で（例えば、テキストフィールド、コンボボックス、チェックボックス、セレクトボックス等です。）情報を入力する要素です。フォームはフォームタグ（\<form\>）で定義します。

	<form>
	...
	input 要素
	...
	</form>

Goではformの処理にすでにとても簡単な方法が用意されています。Requestの中にformを専門に処理するものがあります。とても簡単にWeb開発に利用できるものです。4.1節の中でGoがどのようにフォームの入力を処理するかご説明します。いかなるユーザの入力も信用はできないので、これらの入力に対しバリデーションを行う必要があります。4.2節ではどのように普通のバリデーションを行うか、細かいデモンストレーションを行います。

HTTPプロトコルはステートレスなプロトコルです。ではどのようにして一人のユーザを同定するのでしょうか？また、フォームが複数回送信されてしまわないように保証するにはどうするのでしょうか？4.3と4.4節ではcookie(cookieはクライアントに保存される情報です。handlerとサーバを通る度にやり取りされるデータです。）等をより詳しくご紹介します。

フォームにはもうひとつ、ファイルをアップロードできるという大きな機能があります。Goはファイルのアップロードをどのように処理しているのでしょうか？大きなファイルをアップロードする際効率よく処理するにはどうすればよいでしょうか？4.5節ではGoによるファイルのアップロード処理の知識を一緒に勉強します。

## 目次
![](images/navi4.png?raw=true)

## links
   * [目次](<preface.md>)
   * 前へ: [第三章概要](<03.5.md>)
   * 次へ: [フォームの入力を処理する](<04.1.md>)

