From e4ab1ca30596890557a7ab2e42606c41d63b601c Mon Sep 17 00:00:00 2001 From: Shin Kojima Date: Sun, 19 Jan 2014 21:14:52 +0900 Subject: [PATCH 01/89] [ja] apply patch --- ja/ebook/01.4.md | 2 +- ja/ebook/02.2.md | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ja/ebook/01.4.md b/ja/ebook/01.4.md index a6fd7f8f..4575d0e5 100644 --- a/ja/ebook/01.4.md +++ b/ja/ebook/01.4.md @@ -166,7 +166,7 @@ "env": { "GOPATH": "$HOME/golang:$GS_GOPATH" } } - `$GS_GOPATH` は gosublime の仮想的な環境変数です。自動的に`.go`ファイルが存在する `~/go/src` を探し出すことで、 `~/go/` をプロジェクトのパスと推測し、自動的に `GOPATH` を適用します。 + `$GS_GOPATH` は gosublime の仮想的な環境変数です。自動的に`.go`ファイルが存在する `~/go/src` を探し出すことで、 `~/go/` をプロジェクトのパスと推測し、自動的に `GOPATH` を適用します。(注意:このような方法ではsublimeにおいてオリジナルのGOPATHを上書きしてしまいます。もしこの設定でエラーが発生した場合は、GOPATHに関連した問題が発生していることになります) もうひとつは、sublime プロジェクトの保存です。 project_name.sublime-project を修正して項目を追加します diff --git a/ja/ebook/02.2.md b/ja/ebook/02.2.md index b4736d7f..aef2b056 100644 --- a/ja/ebook/02.2.md +++ b/ja/ebook/02.2.md @@ -103,7 +103,7 @@ Goではbool値の型は`bool`です。値は`true`もしくは`false`です。 >注意しなければならないのは、これらの型の変数間は相互に代入または操作を行うことができないということです。コンパイル時にコンパイラはエラーを発生させます。 > ->下のコードはエラーが発生します。 +>下のコードはエラーが発生します。:invalid operation: a + b (mismatched types int8 and int32) > >> var a int8 @@ -135,7 +135,7 @@ Goではbool値の型は`bool`です。値は`true`もしくは`false`です。 frenchHello = "Bonjour" // 通常の代入 } -Goの文字列は変更することができません。例えば下のコードはコンパイル時にエラーが発生します。 +Goの文字列は変更することができません。例えば下のコードはコンパイル時にエラーが発生します。:cannot assign to s[0] var s string = "hello" s[0] = 'c' @@ -168,7 +168,10 @@ Goでは`+`演算子を使って文字列を連結することができます: m := `hello world` -`` ` `` で括られた文字列はRaw文字列です。すなわち、文字列はコード内の形式がそのままプリント時の形式になります。文字列の変更はありません。開業はそのまま出力されます。 +`` ` `` で括られた文字列はRaw文字列です。すなわち、文字列はコード内の形式がそのままプリント時の形式になります。文字列の変更はありません。改行はそのまま出力されます。例えばこの例では以下のように出力されます: + + hello + world ### エラー型 Goにはビルトインの`error`型があります。専らエラー情報の処理に使用されます。Goの`package`の中にはエラー処理を行う`errors`というパッケージがあります。 From 43003784bdca62317bc799f96ea7c7fb503c2904 Mon Sep 17 00:00:00 2001 From: Shin Kojima Date: Sun, 19 Jan 2014 21:17:47 +0900 Subject: [PATCH 02/89] [ja] apply patch --- ja/ebook/05.0.md | 2 ++ ja/ebook/05.7.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/ja/ebook/05.0.md b/ja/ebook/05.0.md index cf8108e8..267e369e 100644 --- a/ja/ebook/05.0.md +++ b/ja/ebook/05.0.md @@ -5,6 +5,8 @@ Goはどのようなデータベースの使用もbuiltinではサポートさ 現在NOSQLはすでにWeb開発の流行となっています。多くのアプリケーションがNOSQLをデータベースとして採用しています。以前のキャッシュではありません。5.6節ではMongoDBとRedisの2つのNOSQLデータベースについてご紹介します。 +>[Go database/sql tutorial](http://go-database-sql.org/)ではよく使われる例と詳細な説明を提供しています。 + ## 目次 ![](images/navi5.png?raw=true) diff --git a/ja/ebook/05.7.md b/ja/ebook/05.7.md index 33371d44..f04872b1 100644 --- a/ja/ebook/05.7.md +++ b/ja/ebook/05.7.md @@ -3,6 +3,8 @@ この一章の学習を通じて、いろいろなデータベースをどのように操作するか学んできました。Webの中でも重要なデータの保存に関する問題が解決したので、みなさんのdatabase/sqlの設計思想により一歩進んだ理解が深まることを願っています。 +>[Go database/sql tutorial](http://go-database-sql.org/)ではよく使われる例と詳細な説明を提供しています。 + ## links * [目次]() * 前へ: [NOSQLデータベースの操作](<05.6.md>) From 2fd541e43bd43d89b0f9b40521d6b2ae4223879d Mon Sep 17 00:00:00 2001 From: Shin Kojima Date: Sun, 19 Jan 2014 21:25:53 +0900 Subject: [PATCH 03/89] [ja] apply patch --- ja/ebook/01.3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ja/ebook/01.3.md b/ja/ebook/01.3.md index 454a5ece..f2be5d30 100644 --- a/ja/ebook/01.3.md +++ b/ja/ebook/01.3.md @@ -33,7 +33,7 @@ array_windows.go array_freebsd.go - `go build`の際、システム名の末尾のファイルから選択的にコンパイルすることができます(linux、darwin、windows、freebsd) + `go build`の際、システム名の末尾のファイルから選択的にコンパイルすることができます(Linux、Darwin、Windows、Freebsd) ## go clean From a15f4cd5c5b8c83d56986f3ccd8b977756511a68 Mon Sep 17 00:00:00 2001 From: Ju2ender Date: Wed, 11 Jun 2014 00:16:03 +0800 Subject: [PATCH 04/89] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20Windows=20=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E5=AE=89=E8=A3=85=E9=83=A8=E5=88=86=E6=8E=AA=E8=BE=9E?= =?UTF-8?q?=E5=B9=B6=E6=8F=8F=E8=BF=B0=E6=B8=85=E6=A5=9A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/01.1.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ebook/01.1.md b/ebook/01.1.md index d35d67c8..50611b11 100644 --- a/ebook/01.1.md +++ b/ebook/01.1.md @@ -96,16 +96,20 @@ Linux系统用户可通过在Terminal中执行命令`arch`(即`uname -m`)来查 如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。 -### Windows 安装 +### Windows 安装 ### -访问[下载地址][downlink],32位系统下载go1.0.3.windows-386.msi,64位系统下载go1.0.3.windows-amd64.msi。双击打开下载的文件,一路按照默认点击下一步,这个时候go已经安装到你的系统中,默认安装之后已经在你的系统环境变量中加入了`c:/go/bin`,这个时候打开cmd,输入`go` +访问[Google Code 下载页][downlink],32 位 Windows 选择名称中包含 windows-386 的 msi 安装包,64 位 Windows 选择名称中包含 windows-amd64 的。下载好后运行,不要修改默认安装目录 C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 `C:\Go\bin\`,并添加环境变量 GOROOT,只为 Go 安装根目录 `C:\Go\` ,这个时候打开cmd,输入`go` -看到类似上面mac安装成功的图片说明已经安装成功 +** 验证是否安装成功 ** -如果出现Go的Usage信息,那么说明Go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了Go的安装目录。 +在运行中输入 `cmd` 打开命令行工具,在提示符下输入 `go`,检查是否能看到 Usage 信息。输入 `cd %GOROOT%`,看是否能进入 Go 安装目录。若都成功,说明安装成功。 + +不能的话请检查上述环境变量 Path 和 GOROOT 的值。若不存在请卸载后重新安装,存在请重启计算机后重试,一般基本是因为没有重启。 ## 第三方工具安装 + ### GVM + gvm是第三方开发的Go多版本管理工具,类似ruby里面的rvm工具。使用起来相当的方便,安装gvm使用如下命令: bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer) From 171f74de5fc53fc9bdb138ab0f07d8bc6abc2a45 Mon Sep 17 00:00:00 2001 From: Ju2ender Date: Wed, 11 Jun 2014 00:19:03 +0800 Subject: [PATCH 05/89] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=AA=E8=BE=9E?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/01.1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebook/01.1.md b/ebook/01.1.md index 50611b11..e19d8996 100644 --- a/ebook/01.1.md +++ b/ebook/01.1.md @@ -98,7 +98,7 @@ Linux系统用户可通过在Terminal中执行命令`arch`(即`uname -m`)来查 ### Windows 安装 ### -访问[Google Code 下载页][downlink],32 位 Windows 选择名称中包含 windows-386 的 msi 安装包,64 位 Windows 选择名称中包含 windows-amd64 的。下载好后运行,不要修改默认安装目录 C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 `C:\Go\bin\`,并添加环境变量 GOROOT,只为 Go 安装根目录 `C:\Go\` ,这个时候打开cmd,输入`go` +访问[Google Code 下载页][downlink],32 位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的。下载好后运行,不要修改默认安装目录 C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 `C:\Go\bin\`,并添加环境变量 GOROOT,只为 Go 安装根目录 `C:\Go\` ,这个时候打开cmd,输入`go` ** 验证是否安装成功 ** From 1542154369594c853fa54cd4313be8abd1a24eb4 Mon Sep 17 00:00:00 2001 From: Ju2ender Date: Wed, 11 Jun 2014 00:20:52 +0800 Subject: [PATCH 06/89] =?UTF-8?q?=E4=BF=AE=E9=A5=B0=E8=AF=AD=E5=8F=A5?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/01.1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebook/01.1.md b/ebook/01.1.md index e19d8996..bbed66c1 100644 --- a/ebook/01.1.md +++ b/ebook/01.1.md @@ -98,7 +98,7 @@ Linux系统用户可通过在Terminal中执行命令`arch`(即`uname -m`)来查 ### Windows 安装 ### -访问[Google Code 下载页][downlink],32 位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的。下载好后运行,不要修改默认安装目录 C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 `C:\Go\bin\`,并添加环境变量 GOROOT,只为 Go 安装根目录 `C:\Go\` ,这个时候打开cmd,输入`go` +访问[Google Code 下载页][downlink],32 位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的。下载好后运行,不要修改默认安装目录 C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 `C:\Go\bin\`,并添加环境变量 GOROOT,值为 Go 安装根目录 `C:\Go\` ,这个时候打开cmd,输入`go` ** 验证是否安装成功 ** From 8b14cb3c25deeae58ba2bc9ea0f778ee167cb846 Mon Sep 17 00:00:00 2001 From: Ju2ender Date: Wed, 11 Jun 2014 00:22:56 +0800 Subject: [PATCH 07/89] =?UTF-8?q?=E5=88=A0=E9=99=A4=20Windows=20=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E4=B8=80=E6=AE=B5=E5=A4=9A=E4=BD=99=E7=9A=84=E8=AF=9D?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=20Markdown=20=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/01.1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ebook/01.1.md b/ebook/01.1.md index bbed66c1..5202e36e 100644 --- a/ebook/01.1.md +++ b/ebook/01.1.md @@ -98,9 +98,9 @@ Linux系统用户可通过在Terminal中执行命令`arch`(即`uname -m`)来查 ### Windows 安装 ### -访问[Google Code 下载页][downlink],32 位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的。下载好后运行,不要修改默认安装目录 C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 `C:\Go\bin\`,并添加环境变量 GOROOT,值为 Go 安装根目录 `C:\Go\` ,这个时候打开cmd,输入`go` +访问[Google Code 下载页][downlink],32 位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的。下载好后运行,不要修改默认安装目录 C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 `C:\Go\bin\`,并添加环境变量 GOROOT,值为 Go 安装根目录 `C:\Go\` 。 -** 验证是否安装成功 ** +**验证是否安装成功** 在运行中输入 `cmd` 打开命令行工具,在提示符下输入 `go`,检查是否能看到 Usage 信息。输入 `cd %GOROOT%`,看是否能进入 Go 安装目录。若都成功,说明安装成功。 From f80130370bc6e99ebd233f57895ba964d68a7575 Mon Sep 17 00:00:00 2001 From: Ju2ender Date: Wed, 11 Jun 2014 00:26:13 +0800 Subject: [PATCH 08/89] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=95=B0=E5=97=A6?= =?UTF-8?q?=E7=9A=84=E8=AF=9D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ebook/01.1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebook/01.1.md b/ebook/01.1.md index 5202e36e..db71d055 100644 --- a/ebook/01.1.md +++ b/ebook/01.1.md @@ -104,7 +104,7 @@ Linux系统用户可通过在Terminal中执行命令`arch`(即`uname -m`)来查 在运行中输入 `cmd` 打开命令行工具,在提示符下输入 `go`,检查是否能看到 Usage 信息。输入 `cd %GOROOT%`,看是否能进入 Go 安装目录。若都成功,说明安装成功。 -不能的话请检查上述环境变量 Path 和 GOROOT 的值。若不存在请卸载后重新安装,存在请重启计算机后重试,一般基本是因为没有重启。 +不能的话请检查上述环境变量 Path 和 GOROOT 的值。若不存在请卸载后重新安装,存在请重启计算机后重试以上步骤。 ## 第三方工具安装 From 1cb84ecb700125312ccb6b11699c56ebe8e73ad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E5=85=89=E7=9B=9B?= Date: Thu, 21 Aug 2014 21:12:09 +0800 Subject: [PATCH 09/89] fix #356 --- ebook/04.2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ebook/04.2.md b/ebook/04.2.md index be7c7083..2792454e 100644 --- a/ebook/04.2.md +++ b/ebook/04.2.md @@ -39,9 +39,9 @@ >Go实现的正则是[RE2](http://code.google.com/p/re2/wiki/Syntax),所有的字符都是UTF-8编码的。 ## 中文 -有时候我们想通过表单元素获取一个用户的中文名字,但是又为了保证获取的是正确的中文,我们需要进行验证,而不是用户随便的一些输入。对于中文我们目前有效的验证只有正则方式来验证,如下代码所示 +有时候我们想通过表单元素获取一个用户的中文名字,但是又为了保证获取的是正确的中文,我们需要进行验证,而不是用户随便的一些输入。对于中文我们目前有两种方式来验证,可以使用 `unicode` 包提供的 `func Is(rangeTab *RangeTable, r rune) bool` 来验证,也可以使用正则方式来验证,这里使用最简单的正则方式,如下代码所示 - if m, _ := regexp.MatchString("^[\\x{4e00}-\\x{9fa5}]+$", r.Form.Get("realname")); !m { + if m, _ := regexp.MatchString("^\\p{Han}+$", r.Form.Get("realname")); !m { return false } From dea810740ad1e62434d06c6f1a6e3dcf2e54a95a Mon Sep 17 00:00:00 2001 From: Hirofumi Tamori Date: Thu, 28 Aug 2014 14:52:50 +0900 Subject: [PATCH 10/89] Fix Japanese Typo --- ja/ebook/02.3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ja/ebook/02.3.md b/ja/ebook/02.3.md index fa747ac6..699d0029 100644 --- a/ja/ebook/02.3.md +++ b/ja/ebook/02.3.md @@ -369,7 +369,7 @@ Goでは関数も変数の一種です。`type`を通して定義します。こ type typeName func(input1 inputType1 , input2 inputType2 [, ...]) (result1 resultType1 [, ...]) -関すを型として扱うことにメリットはあるのでしょうか?ではこの型の関数を値として渡してみましょう。以下の例をご覧ください。 +関数を型として扱うことにメリットはあるのでしょうか?ではこの型の関数を値として渡してみましょう。以下の例をご覧ください。 package main import "fmt" From f2101217b9501a5106ddcc7251269e96388d9803 Mon Sep 17 00:00:00 2001 From: Hirofumi Tamori Date: Fri, 29 Aug 2014 00:00:55 +0900 Subject: [PATCH 11/89] [ja] fix typos, translate a Chinese sentence, modify expression [ja] fixed typos, translate a sentence left in Chinese, modify some expressions. --- ja/ebook/02.2.md | 2 +- ja/ebook/02.5.md | 22 +++++++++++----------- ja/ebook/03.1.md | 2 +- ja/ebook/04.2.md | 4 ++-- ja/ebook/05.1.md | 2 +- ja/ebook/05.3.md | 2 +- ja/ebook/06.0.md | 2 +- ja/ebook/12.0.md | 2 +- ja/ebook/14.0.md | 2 +- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/ja/ebook/02.2.md b/ja/ebook/02.2.md index 4d26c2ec..c0610f41 100644 --- a/ja/ebook/02.2.md +++ b/ja/ebook/02.2.md @@ -445,7 +445,7 @@ mapを使う段階で注意しなければならないことがいくつかあ 図2.5 makeとnewの低レイヤでのメモリの割り当て -"ゼロ値"というのは何もカラの値ではありません。これは一種の"変数が埋めらる前"のデフォルト値であり、通常は0です。 +"ゼロ値"というのは何も空の値ではありません。これは一種の"変数が埋めらる前"のデフォルト値であり、通常は0です。 それぞれの型のゼロ値は以下の通りです int 0 diff --git a/ja/ebook/02.5.md b/ja/ebook/02.5.md index 4c792663..4e941514 100644 --- a/ja/ebook/02.5.md +++ b/ja/ebook/02.5.md @@ -2,7 +2,7 @@ 前の2つの章で関数とstructをご紹介しました。関数をstructのフィールドとして処理したくなったんじゃないですか?今日は関数のもう一つの形態についてご説明します。受け取り手のいる関数で、我々が`method`とよんでいるものです。 ## method -今、このような状況にいると仮定します。あなたは長方形というstructを定義してこの面積を求めようとしています。では、我々の一般的な思考回路に基づけば下のような方法で実現するでしょう。 +今、このような状況にいると仮定します。あなたは長方形というstructを定義してこの面積を求めようとしています。我々の一般的な思考回路に基づけば下のような方法で実現するでしょう。 package main import "fmt" @@ -22,11 +22,11 @@ fmt.Println("Area of r2 is: ", area(r2)) } -このコードは長方形の面積を求めることができますが、area()はRectangleのメソッドで実現されたものではありません(オブジェクト指向のメソッドのようなもの)。Rectangleのオブジェクト(ここではr1,r2)を引数に面積を京s何する関数に渡しているだけです。 +このコードは長方形の面積を求めることができますが、area()はRectangleの(一般的なオブジェクト指向でいうような)メソッドで実現されたものではありません。Rectangleのオブジェクト(ここではr1,r2)を引数に面積を計算する関数に渡しているだけです。 このように実現してももちろん構わないのですが、図形が増えてきて、正方形、五角形ついには多角形になってきた頃、これらの面積も求めようとするとどうでしょう?この場合関数を増やすしかなくなってしまいます。関数名はそれぞれ用意しなければなりません。`area_rectangle, area_circle, area_triangle...`といった具合に。 -下の図で示すように、楕円が関数を表しています。これらの関数はstructに属していない(またはオブジェクト指向の専門用語でclassに属していないといいます)ので、structの外側に単独で存在しており、概念上どのstructにも属していないことになります。 +下の図で示すように、楕円が関数を表しています。これらの関数はstructに属していない(オブジェクト指向用語で言い換えるとclassに属していない)ので、structの外側に単独で存在しており、概念上どのstructにも属していないことになります。 ![](images/2.5.rect_func_without_receiver.png?raw=true) @@ -34,7 +34,7 @@ 明らかにこのような実現方法はエレガントではありません。それに概念からしても"面積"は"形状"の一属性です。これはある特定の形状に属しています。長方形の縦と横と同じようなものです。 -このような理由から`method`の概念が生まれました。`method`はある型の上に付属しています。この文法と関数の宣言の文法はほとんど同じです。ただ、`fenc`の後にreceiver(methodがくっついているということです。)を追加します。 +このような理由から`method`の概念が生まれました。`method`はある型に属しています。この文法と関数の宣言の文法はほとんど同じです。ただ、`func`の後にreceiver(methodがくっついているということです)を追加します。 上で述べた形状の例からすると、method `area()` はある形状(たとえばRectangle)に由来して発生しています。Rectangle.area()の主語はRectangle、area()はRectangleに属するメソッドで外側の関数ではありません。 @@ -89,9 +89,9 @@ methodの文法は以下のとおりです: methodを使う時にはいくつか注意が必要です。 -- methodは名前はまったく同じといってもレシーバが異なればmethodも異なります。 +- methodはまったく同じ名前でもレシーバが異なればmethodも異なります。 - methodはレシーバのフィールドにアクセスすることができます。 -- methodのコールは`.`を通じてアクセスします。structがフィールドにアクセスするのと同じです。 +- methodの呼び出しは`.`を通じて行います。structがフィールドにアクセスするのと同じです。 図解: @@ -122,7 +122,7 @@ methodはstructの上でしか使用されないのでしょうか?当然違 "December":31, } -わかりましたか?簡単でしょう?このように自分のコードの中に意味のある型を定義することができるのです。実際はエイリアスを定義しているだけです。Cのtypedefににたようなもので、例えば上のagesはintの代わりになっています。 +わかりましたか?簡単でしょう?このように自分のコードの中に意味のある型を定義することができるのです。実際はエイリアスを定義しているだけです。Cのtypedefに似たようなもので、例えば上のagesはintの代わりになっています。 それじゃあ、`method`にもどりましょう。 @@ -212,17 +212,17 @@ methodはstructの上でしか使用されないのでしょうか?当然違 - Volume()はレシーバをBoxとして定義します。Boxの堆積を返します。 - SetColor(c Color)はBoxの色をcに変更します。 - BiggestsColor()はBoxListに定義されており、listの中の体積が最大の色を返します。 -- PointItBlack()はBoxListのすべてのBoxの色を全部黒に変更します。 -- String()はColorに定義されており、Colorno具体的な色を返します(文字列形式) +- PaintItBlack()はBoxListのすべてのBoxの色を全部黒に変更します。 +- String()はColorに定義されており、Colorの具体的な色を返します(文字列形式) 上のコードは文字で書くと非常に簡単に思えませんか?私達は問題を解決する場合問題の描写を通して、対応するコードを書くことで実現します。 ### ポインタとしてのreceiver ではここで、SetColorのメソッドを見なおしてみましょう。このreceiverはBoxのポインタをさしています。そうです。*Boxを使えるのです。どうしてBox本体ではなくポインタを使うのでしょうか? -SetColorを定義した本当の目的はこのBoxの色を変更することです。もしBoxのポインタを渡さなければ、SetCororが受け取るのは実はBoxのコピーになってしまいます。つまり、メソッド内で色の変更を行うと、Boxのコピーを操作しているだけで、本当のBoxではないのです。そのため、ポインタを渡す必要があります。 +SetColorを定義した本当の目的はこのBoxの色を変更することです。もしBoxのポインタを渡さなければ、SetColorが受け取るのは実はBoxのコピーになってしまいます。つまり、メソッド内で色の変更を行うと、Boxのコピーを操作しているだけで、本当のBoxではないのです。そのため、ポインタを渡す必要があります。 -ここではreceiverをメソッドの第一引数にました。こうすれば前の関数で説明した値渡しと参照渡しも難しくなくなるでしょう。 +ここではreceiverをメソッドの第一引数にしました。こうすれば前の関数で説明した値渡しと参照渡しも難しくなくなるでしょう。 もしかしたらSetColor関数の中で以下のように定義すべきじゃないかと思われたかもしれません。`*b.Color=c`、ところが`b.Color=c`でよいのです。ポインタに対応する値を読み込むことが必要ですから。 diff --git a/ja/ebook/03.1.md b/ja/ebook/03.1.md index 6d4c9b68..53540523 100644 --- a/ja/ebook/03.1.md +++ b/ja/ebook/03.1.md @@ -116,7 +116,7 @@ HTTPのresponseパケットを見てみることにしましょう。構造は //空行 ヘッダとボディを分けるために使われます。 Goの正規表現の実装は[RE2](http://code.google.com/p/re2/wiki/Syntax)です。すべての文字はUTF-8エンコーディングです。 -## 中文 +## 中国語 フォームの要素からユーザの中国語名を得たい場合で、なおかつ正しい中国語であることを保証したい場合、検証を行う必要があります。ユーザに自由に入力はさせません。中国語に対する有効な検証方法は今のところ正規表現しかありません。下のコードをご確認ください if m, _ := regexp.MatchString("^[\\x{4e00}-\\x{9fa5}]+$", r.Form.Get("realname")); !m { return false } -## 英文 +## 英語 あるユーザの英語名を知りたいときなど、フォームの要素から英語の値を取り出したい場合は、astaxieであってasta谢ではないはずです。(訳注:「谢」はピンインでxieと書く) 簡単な正規表現を使ってデータを検証することができます: diff --git a/ja/ebook/05.1.md b/ja/ebook/05.1.md index 69801941..9195b965 100644 --- a/ja/ebook/05.1.md +++ b/ja/ebook/05.1.md @@ -1,5 +1,5 @@ # 5.1 database/sqlインターフェース -GoのPHPと異なる部分は、Goにはオフィシャルが提供するデーターベースドライバを持っていない事です。開発者が開発するためにデータベースドライバで標準のインターフェースが定義されています。開発者は定義されているインターフェースに従って目的のデータベースドライバを開発することができます。これにはメリットがあります。標準のインターフェースを参照するだけでコードを開発できます。以降データベースに遷移する時、どのような修正も必要ありません。では、Goはどのような標準インターフェースを定義しているのでしょうか?詳しく分析してみることにしましょう。 +GoがPHPと異なる部分は、Goには公式に提供されたデータベースドライバがない事です。開発者が開発するためにデータベースドライバで標準のインターフェースが定義されています。開発者は定義されているインターフェースに従って目的のデータベースドライバを開発することができます。これにはメリットがあります。標準のインターフェースを参照するだけでコードを開発できます。以降データベースに移行する時、どのような修正も必要ありません。では、Goはどのような標準インターフェースを定義しているのでしょうか?詳しく分析してみることにしましょう。 ## sql.Register database/sqlに存在する関数はデータベースドライバを登録するためにあります。サードパーティの開発者がデータベースドライバを開発する時は、すべてinit関数を実装します。init関数ではこの`Register(name string, driver driver.Driver)`をコールすることでこのドライバの登録を完了させます。 diff --git a/ja/ebook/05.3.md b/ja/ebook/05.3.md index 736a2687..3c643d9a 100644 --- a/ja/ebook/05.3.md +++ b/ja/ebook/05.3.md @@ -1,6 +1,6 @@ # 5.3 SQLiteデータベースの使用 -SQLiteはオープンソースの組み込み式リレーショナルデータベースです。独立しており、設定なしでトランザクションのSQLデータベースエンジンをサポートします。非常にポータブルで簡単に利用でき、コンパクトで効率が高く、信頼性があります。他のデータベース管理システムとは異なり、SQLiteのインストールと実行は非常に簡単です。多くの場合は、ただSQLiteのバイナリファイルを用意するだけですぐに作成、接続、使用することができます。もしあなたが現在組み込み式データベースかソリューションをお探しであれば、SQLいては絶対に考慮するに値します。SQLiteはいわばオープンソースのAccessのようなものです。 +SQLiteはオープンソースの組み込み式リレーショナルデータベースです。独立しており、設定なしでトランザクションのSQLデータベースエンジンをサポートします。非常にポータブルで簡単に利用でき、コンパクトで効率が高く、信頼性があります。他のデータベース管理システムとは異なり、SQLiteのインストールと実行は非常に簡単です。多くの場合は、ただSQLiteのバイナリファイルを用意するだけですぐに作成、接続、使用することができます。もしあなたが現在組み込み式データベースかソリューションをお探しであれば、SQLiteは絶対に考慮するに値します。SQLiteはいわばオープンソースのAccessのようなものです。 ## ドライバ Goがサポートするsqliteのドライバも比較的多いのですが、大部分はdatabase/sqlインターフェースをサポートしていません。 diff --git a/ja/ebook/06.0.md b/ja/ebook/06.0.md index 0d381ce7..30b415a2 100644 --- a/ja/ebook/06.0.md +++ b/ja/ebook/06.0.md @@ -1,7 +1,7 @@ # 6 sessionとデータの保存 Web開発ではどのようにしてユーザの閲覧過程のすべてをコントロールするかということは非常に重要です。HTTPプロトコルはステートレスですので、ユーザの毎回のリクエストにはステータスがありません。Web操作の全体の過程の中でどの接続がどのユーザと関係しているのか知る方法がありません。では、どのようにしてこの問題を解決しているのでしょうか?Webでの伝統的な解決方法はcookieとsessionです。cookieによるメカニズムはクライアント側でのメカニズムです。ユーザのデータをクライアントに保存します。sessionメカニズムはサーバ側でのメカニズムです。サーバはハッシュテーブルのような構造でデータを保存します。ホームページの各閲覧者はユニークなIDを与えられます。すなわち、SessionIDです。この保存形式は2つだけです:urlによって渡されるか、クライアントのcookieに保存されるかです。当然、Sessionをデータベースに保存することもできます。よりセキュリティが高まりますが、効率の面ではいくつか後退します。 -6.1節ではsessionメカニズムとcookieメカニズムの関係と区別についてご紹介します。6.2ではGo言語がどのようにsessionを実現しているかご説明します。この中では簡単なsessionマネージャを実現します。6.3節ではどのようにしてsessionハイジャックの状態を防ぐかご説明します。どのように効果的にsessionを保護するのか。sessionはそもそもどのようなところに保存してもよいのです。6.3節ではsessionをメモリの中に保存しますが、我々のアプリケーションをもう一歩展開させる場合、アプリケーションのsession共有を実現する必要があります。sessionをデータベースの中(memcacheまたはredis)に保存します。6.4節ではどのようにしてこの機能を実装するかご説明します。 +6.1節ではsessionメカニズムとcookieメカニズムの関係と区別についてご紹介します。6.2ではGo言語がどのようにsessionを実現しているかご説明します。この中では簡単なsessionマネージャを実現します。6.3節ではどのようにしてsessionハイジャックの状態を防ぐかご説明します。どのように効果的にsessionを保護するのか。sessionはそもそもどのようなところに保存してもよいのです。6.3節ではsessionをメモリの中に保存しますが、我々のアプリケーションをもう一歩展開させる場合、アプリケーションのsession共有を実現する必要があります。sessionをデータベースの中(memcachedまたはredis)に保存します。6.4節ではどのようにしてこの機能を実装するかご説明します。 ## 目次 ![](images/navi6.png?raw=true) diff --git a/ja/ebook/12.0.md b/ja/ebook/12.0.md index e79dce61..34948d50 100644 --- a/ja/ebook/12.0.md +++ b/ja/ebook/12.0.md @@ -1,7 +1,7 @@ # 12 デプロイとメンテナンス 現在までのところ、我々はどのようにプログラムを開発するかご紹介しました。プログラムのデバッグとテストには開発の最後の10%は90%の時間を必要とすると言われます。ですから、この章では最後の10%の部分を強調して、信用と使用に足る優秀なアプリケーションになるよう細部を考慮する必要があります。上の10%はこれらの細部を指しています。 -この章では4つの節によってこれらの細部の処理をご紹介します。第一節ではサーバでプログラムが生成するログをどのように記録するかご紹介します。第二節ではエラーが発生した時に我々のプログラムがどのように処理されるかと、ユーザのアクセスに与える影響をなるべく少なくするにはどうすべきかご紹介します。第三節ではGoの独立したプログラムをどのようにデプロイするかご紹介します。現在GoプログラムはまだCのようにdaemonを書くことができませんので、これらのプロセスとプログラムのバックエンドをどのように実行すべきでしょうか?第四節ではアプリケーションデータのバックアップとリストアをご紹介します。アプリケーションが壊れた状況でなるべくデータの完全性を保証します。 +この章では4つの節によってこれらの細部の処理をご紹介します。第一節ではサーバでプログラムが生成するログをどのように記録するかご紹介します。第二節ではエラーが発生した時に我々のプログラムがどのように処理されるかと、ユーザのアクセスに与える影響をなるべく少なくするにはどうすべきかご紹介します。第三節ではGoの独立したプログラムをどのようにデプロイするかご紹介します。現在GoプログラムはまだCのようにdaemonを書くことができません。ではこれらのプロセスとプログラムのバックエンドをどのように実行すべきでしょうか?第四節ではアプリケーションデータのバックアップとリストアをご紹介します。アプリケーションが壊れた状況でなるべくデータの完全性を保証します。 ## 目次 ![](images/navi12.png?raw=true) diff --git a/ja/ebook/14.0.md b/ja/ebook/14.0.md index 707778f8..737e2d90 100644 --- a/ja/ebook/14.0.md +++ b/ja/ebook/14.0.md @@ -1,5 +1,5 @@ # 14 Webフレームワークの拡張 -第13章においてWebフレームワークの開発をご紹介しました。MVC、ルーティング、ログ処理、設定処理の紹介を通じて基本的なフレームワークシステムを完成しました。しかしより良いフレームワークは便利な補助ツールでもって素早いWeb開発を行うものです。ではこの章ではどのように素早くWeb開発を行うツールを利用するかについてご紹介していきましょう。第1章で静的なファイルをどのように処理するかご紹介しました。現在あるtwitterのオープンソースのbootstrapをどのように利用することで素早く美しいホームページを開発するか、第二節では前にご紹介したsessionを使ってどのようにユーザのログイン処理を行うかについてご紹介します。第3節ではどのように簡便にフォームを出力する、これらのフォームにどのようにデータの検証を行うか、どのように素早くmodelと結合してデータの追加、削除、修正といった操作を行うかご紹介しました。第4節ではどのようにユーザの認証をおこなうかご紹介しました。http basci認証、http digest認証を含みます。第5節では前にご紹介したi18nを使ってどのように多言語をサポートアプリケーションを開発するかご紹介しました。 +第13章においてWebフレームワークの開発をご紹介しました。MVC、ルーティング、ログ処理、設定処理の紹介を通じて基本的なフレームワークシステムを完成しました。しかしより良いフレームワークは便利な補助ツールでもって素早いWeb開発を行うものです。ではこの章ではどのように素早くWeb開発を行うツールを利用するかについてご紹介していきましょう。第1章で静的なファイルをどのように処理するかご紹介しました。現在あるtwitterのオープンソースのbootstrapをどのように利用することで素早く美しいホームページを開発するか、第二節では前にご紹介したsessionを使ってどのようにユーザのログイン処理を行うかについてご紹介します。第3節ではどのように簡便にフォームを出力し、どのようにフォームのデータの検証を行うか、また、どのように素早くmodelと結合してデータの追加、削除、修正といった操作を行うかご紹介しました。第4節ではどのようにユーザの認証をおこなうかご紹介しました。http basci認証、http digest認証を含みます。第5節では前にご紹介したi18nを使ってどのように多言語をサポートアプリケーションを開発するかご紹介しました。 この章の拡張を通して、beegoフレームワークが素早いWeb開発の特徴を有することになります。最後にどのようにこれらの拡張の特徴を利用して第13章で開発したブログシステムを拡張するかご紹介しましょう。完全で美しいブログシステムを開発することで、読者はbeego開発があなたに与えるスピードをご理解いただけると思います。 From 78f25c13557b7df4452223bd5613be71b7c0f7cd Mon Sep 17 00:00:00 2001 From: Hirofumi Tamori Date: Fri, 29 Aug 2014 22:59:29 +0900 Subject: [PATCH 12/89] =?UTF-8?q?"=E6=A6=82=E8=A6=81"=20->=20"=E3=81=BE?= =?UTF-8?q?=E3=81=A8=E3=82=81"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit More natural in Japanese; "概要" sometimes evokes "outline". --- ja/ebook/01.5.md | 2 +- ja/ebook/02.8.md | 2 +- ja/ebook/03.5.md | 2 +- ja/ebook/04.6.md | 2 +- ja/ebook/05.7.md | 2 +- ja/ebook/06.5.md | 2 +- ja/ebook/07.7.md | 2 +- ja/ebook/08.5.md | 2 +- ja/ebook/09.7.md | 2 +- ja/ebook/10.4.md | 2 +- ja/ebook/11.4.md | 2 +- ja/ebook/12.5.md | 2 +- ja/ebook/13.6.md | 2 +- ja/ebook/14.7.md | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ja/ebook/01.5.md b/ja/ebook/01.5.md index 55a7e43a..efd6f52e 100644 --- a/ja/ebook/01.5.md +++ b/ja/ebook/01.5.md @@ -1,4 +1,4 @@ -# 1.5 概要 +# 1.5 まとめ この章では主にどのようにしてGoをインストールするかについてご紹介しました。Goは3つの種類のインストール方法があります:ソースコードインストール、標準パッケージインストール、サードパーティツールによるインストールです。インストール後開発環境を整え、ローカルの`$GOPATH`を設定します。`$GOPATH`設定を通じて読者はプロジェクトを作成することができます。次にどのようにプロジェクトをコンパイルするのか説明しました。アプリケーションのインストールといった問題はたくさんのGoコマンドを使用する必要があります。そのため、Goで日常的に用いられるコマンドツールについてもご説明しました。コンパイル、インストール、整形、テストなどのコマンドです。最後にGoの開発ツールについてご紹介しました。現在多くのGoの開発ツールには:LiteIDE、sublime、VIM、Emacs、Eclipse、Ideaといったツールがあります。読者は自分が一番慣れ親しんだツールを設定することができます。便利なツールで素早くGoアプリケーションを開発できるよう願っています。 diff --git a/ja/ebook/02.8.md b/ja/ebook/02.8.md index aa48a728..e0b4f8dc 100644 --- a/ja/ebook/02.8.md +++ b/ja/ebook/02.8.md @@ -1,4 +1,4 @@ -# 2.8 概要 +# 2.8 まとめ この章では主にGo言語のいくつかの文法をご紹介しました。文法を通してGoがいかに簡単かご覧いただけたかと思います。たった25個のキーワードです。もう一度これらキーワードが何に使われるのか見てみることにしましょう。 diff --git a/ja/ebook/03.5.md b/ja/ebook/03.5.md index 94b84f82..fccf5458 100644 --- a/ja/ebook/03.5.md +++ b/ja/ebook/03.5.md @@ -1,4 +1,4 @@ -# 3.5 概要 +# 3.5 まとめ この章ではHTTPプロトコル、DNS名前解決のプロセス、どのようにしてgoで簡単なweb serverを実装するかご紹介しました。net/httpパッケージのソースコードに触れるうちにこのserverを実装する秘密についてお分かりいただけたかと思います。 この章の学習を通じて、GoによるWeb開発の初歩をご理解いただければ幸いです。我々はまた対応するコードを見ることでGoでWebアプリケーションを開発することがとても便利でまた相当柔軟であると分かりました。 diff --git a/ja/ebook/04.6.md b/ja/ebook/04.6.md index e3b349da..bc8c035e 100644 --- a/ja/ebook/04.6.md +++ b/ja/ebook/04.6.md @@ -1,4 +1,4 @@ -# 4.6 概要 +# 4.6 まとめ この一章ではGoでどのようにフォームの情報を処理するか学びました。ユーザのログインから、ファイルのアップロードの例で、Goがformの情報およびファイルをアップロードする手段についてご説明しました。しかし、フォームを処理する過程ではユーザの入力した情報を懸賞する必要があります。ホームページのセキュリティの重要性を考慮すると、データのフィルタリングは相当重要です。そのため、以降の章では異なる方面のデータフィルタリングをご説明します。同時にGoの文字列に対する正規表現についても述べます。 この一章を通してクライアントとサーバが如何にデータを互いにやりとりするか理解いただけたと思います。クライアントはデータをサーバシステムに渡し、サーバはデータを受け取って結果をクライアントにフィードバックします。 diff --git a/ja/ebook/05.7.md b/ja/ebook/05.7.md index 33371d44..61e27d6d 100644 --- a/ja/ebook/05.7.md +++ b/ja/ebook/05.7.md @@ -1,4 +1,4 @@ -# 5.7 概要 +# 5.7 まとめ この章ではGoがどのようにdatabase/sqlインターフェースを設計するのかご説明しました。その後、サードパーティによるリレーショナルデータベースドライバの使用をご紹介しました。次にbeedbというリレーショナルデータベースに基づくORMライブラリがどのようにしてデータベースに対して簡単な操作を行うかご説明しました。最後にNOSQLのいくつかの知識をご紹介しました。現在GoのNOSQLに対するサポートはなかなかよくできています。Goは21世紀のC言語ですから、21世紀のデータベースに対するサポートも非常によくできています。 この一章の学習を通じて、いろいろなデータベースをどのように操作するか学んできました。Webの中でも重要なデータの保存に関する問題が解決したので、みなさんのdatabase/sqlの設計思想により一歩進んだ理解が深まることを願っています。 diff --git a/ja/ebook/06.5.md b/ja/ebook/06.5.md index db31bdba..c9e71eae 100644 --- a/ja/ebook/06.5.md +++ b/ja/ebook/06.5.md @@ -1,4 +1,4 @@ -# 6.5 概要 +# 6.5 まとめ この章ではsession/cookieとは何かを、また両者の関係について勉強しました。しかし現在Goのオフィシャルパッケージではsessionがサポートされていません。そのため、sessionマネージャを設計しました。sessionの作成から破棄に至る全体の過程を実装し、Providerのインターフェースを定義することによって、各バックエンドのsessionストレージをサポートできるようにしました。第三節ではメモリストレージによってどのようにsessionの管理を実装するのかご紹介しました。第四節ではsessionハイジャックの過程と、どのようにsessionハイジャックを防止するのかを解説しました。第一章の解説を通して、読者の皆様方にはsessionの実行原理とどのように実現されるか、またどのように安全にsessionを使用するかについて理解いただけるよう望んています。 ## links * [目次]() diff --git a/ja/ebook/07.7.md b/ja/ebook/07.7.md index d84f0f60..b2be0cf3 100644 --- a/ja/ebook/07.7.md +++ b/ja/ebook/07.7.md @@ -1,4 +1,4 @@ -# 7.7 概要 +# 7.7 まとめ この章ではみなさんにXML、JSON、正規表現およびテンプレートの技術といったテキスト処理のツールをいくつかご紹介しました。XMLとJSONを使って様々な意味を表現することができます。正規表現ではテキストの検索/置換/切り取りといった処理を行うことができます。テンプレート技術を使うとこれらのデータをユーザに表示させることができます。これらはどれもWebアプリケーションを開発する過程で必要となる技術です。この節のご紹介を通じてどのようにテキストを処理、表示するかご理解いただけたかと思います。 ## links diff --git a/ja/ebook/08.5.md b/ja/ebook/08.5.md index 9dd82d99..eaf4a03d 100644 --- a/ja/ebook/08.5.md +++ b/ja/ebook/08.5.md @@ -1,4 +1,4 @@ -# 8.5 概要 +# 8.5 まとめ この章では現在流行しているいくつかの主なネットワークアプリケーションの開発方法についてご紹介しました。第一節ではネットワークプログラミングの基礎をご紹介しました。Socketプログラミングです。なぜなら現在ネットワークはクラウドの方向に急速に進化しています。この技術で展開されるsocket知識の基礎は開発者としてマスターしておかなければなりません。第二節では現在流行しつつあるHTML5の重要な特徴であるWebSocketについてご紹介しました。これを使うとサーバは主導的に情報をpushできるようになります。昔のajaxポーリングパターンの簡略化も述べました。第三節ではRESTプログラミングパターンをご紹介しました。これらのパターンは特にネットワークアプリケーションAPIの開発に適しています。上の四種類の開発方法において、Goはすでに良いサポートを提供しています。netパッケージおよびそのサブパッケージはいずれもネットワークプログラミングのツールの在り処を含んでいます。もしより詳しく関連する実装の詳細に足を踏み入れるのであれば、このパッケージのソースコードを試しに読んでみてください。 ## links * [目次]() diff --git a/ja/ebook/09.7.md b/ja/ebook/09.7.md index 07c77fd1..15992b50 100644 --- a/ja/ebook/09.7.md +++ b/ja/ebook/09.7.md @@ -1,4 +1,4 @@ -# 9.7 概要 +# 9.7 まとめ この章ではCSRF攻撃、XSS攻撃、SQLインジェクション攻撃といったWebアプリケーションの典型的な攻撃手法をご紹介しました。これらはどれもアプリケーションがユーザの入力に対して良いフィルタリングを起こさなかったことによるものです。そのため、攻撃の方法をご紹介する以外に、これらの攻撃の発生を防止する方法としてどのようにして有効にデータをフィルタリングするかについてもご紹介しました。また、日増しに発生する重大なパスワード漏洩事件に対し、Webアプリケーションを設計する上で採用可能な暗号化ソリューションについて基礎から専門的なものまでご紹介しました。最後に慎重に扱うべきデータに対する暗号化/復元をご紹介しました。Go言語では三種類の双方向暗号化アルゴリズムを提供しています:base64、aesとdesの実装です。 この章を書いた目的は読者の意識でセキュリティの概念を強化して欲しいと思ったからです。Webアプリケーションを書く時はぜひご注意していただき、我々が書くWebアプリケーションをハッカー達の攻撃から遠ざけるようにしてください。これらのパッケージを十分に利用することで、安全なWebアプリケーションを作ることができます。 diff --git a/ja/ebook/10.4.md b/ja/ebook/10.4.md index 4fa5dc24..6f14fe93 100644 --- a/ja/ebook/10.4.md +++ b/ja/ebook/10.4.md @@ -1,4 +1,4 @@ -# 10.4 概要 +# 10.4 まとめ この章の紹介を通じて、読者はどのようにしてi18nを操作するかに対して深く理解が得られたはずです。私もこの章の内容にもとづいてオープンソースのソリューションであるgo-i18nをご紹介しました:https://github.com/astaxie/go-i18n このオープンソースライブラリを通して多言語バージョンのWebアプリケーションを非常に簡単に実現することができ、我々のアプリケーションに気楽に国際化を実現させることができます。もしこのオープンソースライブラリに間違いや足りない部分があれば、ぜひこのオープンソースプロジェクトに参加することで、このライブラリがGoの標準ライブラリになるよう手助けしてください。 ## links * [目次]() diff --git a/ja/ebook/11.4.md b/ja/ebook/11.4.md index eb61c3f1..8792a0f0 100644 --- a/ja/ebook/11.4.md +++ b/ja/ebook/11.4.md @@ -1,4 +1,4 @@ -# 11.4 概要 +# 11.4 まとめ この章では3つの節に分けてGo言語においてどのようにエラーを処理するか、どのようにエラー処理を設計するかをご紹介しました。第二節ではどのようにしてGDBを使ってプログラムをデバッグするかご紹介しました。GDBを使うことで我々は簡単にステップ実行、変数の表示、変数の修正、実行過程の出力等を行うことができます。最後にどのようにしてGo言語がはじめから持っている軽量なフレームワーク`testing`を利用してユニットテストと耐久テストを書くかについてご紹介しました。`go test`を使用することで便利にこれらのテストを行うことができ、将来のコードがアップグレードされ、修正された後でも簡単に回帰テストを行うことができます。この章はあなたがプログラムのロジックを書くことに対して何の助けにもならなかったかもしれません。しかし、あなたが書いたプログラムコードの質を高く保つには非常に重要です。なぜならよくできたWebアプリケーションは必ずよくできたエラー処理メカニズム(エラーの表示がユーザフレンドリーで拡張性がある)を持っているからです。ユーザフレンドリーなユニットテストと耐久テストは実運用が開始された後のコードが良い性能を保ち、予定通り実行されることを保証してくれます。 ## links diff --git a/ja/ebook/12.5.md b/ja/ebook/12.5.md index 6e2b6d71..00d1ece3 100644 --- a/ja/ebook/12.5.md +++ b/ja/ebook/12.5.md @@ -1,4 +1,4 @@ -# 12.5 概要 +# 12.5 まとめ この章ではどのようにして我々の開発したWebアプリケーションのデプロイとメンテナンスを行うかについていくつかのトピックを討論しました。これらの内容は非常に重要で、メンテナンスを最小化し、アプリケーションの円滑な運用を行うためにはかならずこれらの問題を考慮する必要があります。 この章で討論した内容は具体的には: diff --git a/ja/ebook/13.6.md b/ja/ebook/13.6.md index a8be11d7..cf4638f7 100644 --- a/ja/ebook/13.6.md +++ b/ja/ebook/13.6.md @@ -1,4 +1,4 @@ -# 13.6 概要 +# 13.6 まとめ この章ではどのように基礎的なGo言語のフレームワークを実装するかについてご紹介しました。フレームワークにはルーティング設計が含まれます。Goのビルトインのhttpパッケージにあるルーティングにはいくつか足りない部分があるため、我々は動的なルーティング規則を設計し、その後MVCモデルにおけるController設計をご紹介しました。controllerはRESTを実装しており、主な考え方はtornadeフレームワークからきています。次にも出るのlayoutおよびテンプレートの自動化技術を実装しました。主に採用したのはGoのビルトインのモデルエンジンです。最後に補足的なログ、設定といった情報の設計をご紹介しました。これらの設計を通して基礎的なフレームワークbeegoを実装しました。現在このフレームワークはすでにgithub上でオープンソースになっています。最後に我々はbeegoを通じてブログシステムの実装を行いました。この実例コードを通してどのように快速にホームページを開発するのかが見渡せたのではないかと思います。 ## links diff --git a/ja/ebook/14.7.md b/ja/ebook/14.7.md index 54b29ed4..96abef99 100644 --- a/ja/ebook/14.7.md +++ b/ja/ebook/14.7.md @@ -1,4 +1,4 @@ -# 14.7 概要 +# 14.7 まとめ この章は主にどのようにしてbeegoフレームワークにもとづいて展開を行うかについて詳しく述べました。これには静的なファイルのサポートが含まれます。静的なファイルでは主にどのようにしてbeegoを利用して素早くウェブページを開発するか、bootstrapを利用して美しいサイトの作成についてご紹介しました;2つ目の概要ではどのようにしてbeegoにおいてsessionManagerを構成するかについてご紹介しました。これはユーザがbeegoを利用した時に素早くsessionを利用するのに便利です;第3章の概要ではフォームとバリデーションについてご紹介しました。Go言語のstructの定義に基づくと、Webを開発する過程で重複する作業から解放されます。また、バリデーションを追加するとできるかぎりデータを安全にすることができます。第4章の概要ではユーザの認証についてご紹介しました。ユーザの認証は主に3つの需要があります。http basicとhttp digest認証、サードパーティ認証、カスタム定義の認証です。コードを用いてどのようにして現在あるサードパーティパッケージからbeegoアプリケーションでこれらの認証を実装するのかデモを行いました。第5章のがいようでは多言語サポートをご紹介しました。beegoではgo-i18nという多言語パッケージを使用しています。ユーザはとても簡単にこのライブラリを利用して多言語Webアプリケーションを開発することができます。第6章ではどのようにしてGoのpprofパッケージを利用するのかご紹介しました。pprofパッケージは性能テストに使われるツールです。beegoに対する改造を施した後pprofパッケージを使うことでユーザはpprofからbeegoにもとづいて開発されたアプリケーションのテストを行うことができます。これら6つの章を通して比較的健全なbeegoフレームワークを展開してきました。このフレームワークは現在の数多くのWebアプリケーションに十分対応することができます。ユーザは自身の相続力を継続して発揮することができます。私はここで簡単にいくつか重要と思われる拡張についてご紹介したにすぎません。 ## links From 732a5879ffe98e36df20d5a3e3f7540e29a1c964 Mon Sep 17 00:00:00 2001 From: Hirofumi Tamori Date: Sat, 30 Aug 2014 23:01:48 +0900 Subject: [PATCH 13/89] =?UTF-8?q?=E6=A6=82=E8=A6=81=20->=20=E3=81=BE?= =?UTF-8?q?=E3=81=A8=E3=82=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit forgot changing items in links, subtitles. --- ja/ebook/01.4.md | 2 +- ja/ebook/02.0.md | 2 +- ja/ebook/02.7.md | 2 +- ja/ebook/03.0.md | 2 +- ja/ebook/03.4.md | 2 +- ja/ebook/04.0.md | 2 +- ja/ebook/04.5.md | 2 +- ja/ebook/05.0.md | 2 +- ja/ebook/05.6.md | 2 +- ja/ebook/06.0.md | 2 +- ja/ebook/06.1.md | 2 +- ja/ebook/06.2.md | 2 +- ja/ebook/06.4.md | 2 +- ja/ebook/07.0.md | 4 ++-- ja/ebook/07.4.md | 2 +- ja/ebook/07.6.md | 2 +- ja/ebook/08.0.md | 2 +- ja/ebook/08.1.md | 2 +- ja/ebook/08.3.md | 2 +- ja/ebook/08.4.md | 4 ++-- ja/ebook/09.0.md | 2 +- ja/ebook/09.1.md | 2 +- ja/ebook/09.2.md | 2 +- ja/ebook/09.3.md | 2 +- ja/ebook/09.4.md | 2 +- ja/ebook/09.5.md | 2 +- ja/ebook/09.6.md | 4 ++-- ja/ebook/10.0.md | 2 +- ja/ebook/10.1.md | 2 +- ja/ebook/10.2.md | 2 +- ja/ebook/10.3.md | 4 ++-- ja/ebook/11.0.md | 2 +- ja/ebook/11.1.md | 2 +- ja/ebook/11.2.md | 2 +- ja/ebook/11.3.md | 4 ++-- ja/ebook/12.0.md | 2 +- ja/ebook/12.1.md | 2 +- ja/ebook/12.2.md | 2 +- ja/ebook/12.3.md | 2 +- ja/ebook/12.4.md | 4 ++-- ja/ebook/13.0.md | 2 +- ja/ebook/13.1.md | 2 +- ja/ebook/13.5.md | 2 +- ja/ebook/14.0.md | 2 +- ja/ebook/14.6.md | 2 +- ja/ebook/preface.md | 28 ++++++++++++++-------------- 46 files changed, 65 insertions(+), 65 deletions(-) diff --git a/ja/ebook/01.4.md b/ja/ebook/01.4.md index a6fd7f8f..1b8d2ba8 100644 --- a/ja/ebook/01.4.md +++ b/ja/ebook/01.4.md @@ -457,4 +457,4 @@ Javaに親しい読者はideaには不慣れだと思います、ideaはプラ ## links * [目次]() * 前へ: [Goのコマンド](<01.3.md>) - * 次へ: [概要](<01.5.md>) + * 次へ: [まとめ](<01.5.md>) diff --git a/ja/ebook/02.0.md b/ja/ebook/02.0.md index 0a101f13..a2877e37 100644 --- a/ja/ebook/02.0.md +++ b/ja/ebook/02.0.md @@ -15,5 +15,5 @@ GoはCに似たコンパイラ型言語です。ですが、このコンパイ ## links * [目次]() - * 前へ: [第一章概要](<01.5.md>) + * 前へ: [第一章まとめ](<01.5.md>) * 次へ: [こんにちは、Go](<02.1.md>) diff --git a/ja/ebook/02.7.md b/ja/ebook/02.7.md index eb972463..ff40386c 100644 --- a/ja/ebook/02.7.md +++ b/ja/ebook/02.7.md @@ -236,4 +236,4 @@ runtimeパッケージにはgoroutineを処理するいくつかの関数が含 ## links * [目次]() * 前へ: [interface](<02.6.md>) - * 次へ: [概要](<02.8.md>) + * 次へ: [まとめ](<02.8.md>) diff --git a/ja/ebook/03.0.md b/ja/ebook/03.0.md index bf0afd5b..1274c009 100644 --- a/ja/ebook/03.0.md +++ b/ja/ebook/03.0.md @@ -7,5 +7,5 @@ Webのプログラミングの基礎を勉強することはあなたにとっ ## links * [目次]() - * 前へ: [第二章概要](<02.8.md>) + * 前へ: [第二章まとめ](<02.8.md>) * 次へ: [webでの作業方法](<03.1.md>) diff --git a/ja/ebook/03.4.md b/ja/ebook/03.4.md index 06da10c8..94372227 100644 --- a/ja/ebook/03.4.md +++ b/ja/ebook/03.4.md @@ -178,4 +178,4 @@ httpパッケージへの分析を通して、全体のコードの実行プロ ## links * [目次]() * 前へ: [Goはどのようにしてweb作業を行うか](<03.3.md>) - * 次へ: [概要](<03.5.md>) + * 次へ: [まとめ](<03.5.md>) diff --git a/ja/ebook/04.0.md b/ja/ebook/04.0.md index 9a887076..328d854f 100644 --- a/ja/ebook/04.0.md +++ b/ja/ebook/04.0.md @@ -21,5 +21,5 @@ HTTPプロトコルはステートレスなプロトコルです。ではどの ## links * [目次]() - * 前へ: [第三章概要](<03.5.md>) + * 前へ: [第三章まとめ](<03.5.md>) * 次へ: [フォームの入力を処理する](<04.1.md>) diff --git a/ja/ebook/04.5.md b/ja/ebook/04.5.md index 9e109411..b1cd5dec 100644 --- a/ja/ebook/04.5.md +++ b/ja/ebook/04.5.md @@ -152,4 +152,4 @@ ## links * [目次]() * 前へ: [フォームの多重送信の防止](<04.4.md>) - * 次へ: [概要](<04.6.md>) + * 次へ: [まとめ](<04.6.md>) diff --git a/ja/ebook/05.0.md b/ja/ebook/05.0.md index cf8108e8..33cf964c 100644 --- a/ja/ebook/05.0.md +++ b/ja/ebook/05.0.md @@ -10,5 +10,5 @@ Goはどのようなデータベースの使用もbuiltinではサポートさ ## links * [目次]() - * 前へ: [第四章概要](<04.6.md>) + * 前へ: [第四章まとめ](<04.6.md>) * 次へ: [database/sqlインターフェース](<05.1.md>) diff --git a/ja/ebook/05.6.md b/ja/ebook/05.6.md index fc6aac61..36c80693 100644 --- a/ja/ebook/05.6.md +++ b/ja/ebook/05.6.md @@ -111,4 +111,4 @@ mgoの操作方法とbeedbの操作方法はほとんど似ていることがわ ## links * [目次]() * 前へ: [beedbライブラリを使用してORM開発を行う](<05.5.md>) - * 次へ: [概要](<05.7.md>) + * 次へ: [まとめ](<05.7.md>) diff --git a/ja/ebook/06.0.md b/ja/ebook/06.0.md index 30b415a2..136d067e 100644 --- a/ja/ebook/06.0.md +++ b/ja/ebook/06.0.md @@ -8,5 +8,5 @@ Web開発ではどのようにしてユーザの閲覧過程のすべてをコ ## links * [目次]() - * 前へ: [第五章概要](<05.7.md>) + * 前へ: [第五章まとめ](<05.7.md>) * 次へ: [sessionとcookie](<06.1.md>) diff --git a/ja/ebook/06.1.md b/ja/ebook/06.1.md index 4367300b..0303c67d 100644 --- a/ja/ebook/06.1.md +++ b/ja/ebook/06.1.md @@ -92,7 +92,7 @@ sessionメカニズムはサーバサイドのメカニズムです。サーバ sessionメカニズム自身は特に複雑ではありませんが、その実装と設定の柔軟性は複雑を極めます。これは一回の経験やひとつのブラウザ、サーバのみの経験でもって普遍的に通用するものではありません。 -## 概要 +## まとめ 上述の通り、sessionとcookieの目的は同じです。どちらもhttpプロトコルのステートレスであるという欠点を克服するためにあります。しかしその方法は異なります。sessionはcookieを通じてクライアントにsession idを保存します。またユーザの他のセッション情報はサーバのsessionオブジェクトに保存されます。これとは対照的に、cookieはすべての情報をクライアントに持たせる必要があります。そのためcookieにはある程度潜在的な脅威が存在します。例えばローカルのcookieに保存されたユーザ名とパスワードが解読されたり、cookieが他のホームページに収集されます(例えば:1.appAが主導的にゾーンBのcookieを設定し、ゾーンBにcookieを取得させます;2.XSS、appAでjavascriptを通じてdocument.cookieを取得し、自分のappBに送信します)。 diff --git a/ja/ebook/06.2.md b/ja/ebook/06.2.md index 1ed609fa..d295d71b 100644 --- a/ja/ebook/06.2.md +++ b/ja/ebook/06.2.md @@ -206,7 +206,7 @@ Webアプリケーションにはユーザのログアウト操作がありま GCが十分にtimeパッケージのタイマー機能を利用していることがおわかりいただけるかと思います。時間が`maxLifeTime`を超えた後GC関数をコールした際、これによって`maxLiefTime`時間内でsessionが利用できることを保証できます。このような方法はまたオンラインユーザの数といった統計に用いることもできます。 -## 概要 +## まとめ これまでに、WebアプリケーションにおけるグローバルなSession管理に用いられるSessionManagerを実装してまいりました。Sessionを提供するために用いられるストレージを定義し、Providerのインターフェースを実装しました。次の節では、インターフェースの定義を通してProviderを実装します。ぜひご参考ください。 ## links diff --git a/ja/ebook/06.4.md b/ja/ebook/06.4.md index e5876b83..312bbae8 100644 --- a/ja/ebook/06.4.md +++ b/ja/ebook/06.4.md @@ -86,4 +86,4 @@ sessionが始まると、生成されたsessionIDの時間を記録する一つ ## links * [目次]() * 前へ: [sessionストレージ](<06.3.md>) - * 次へ: [概要](<06.5.md>) + * 次へ: [まとめ](<06.5.md>) diff --git a/ja/ebook/07.0.md b/ja/ebook/07.0.md index 88daddd0..78bb7af9 100644 --- a/ja/ebook/07.0.md +++ b/ja/ebook/07.0.md @@ -1,12 +1,12 @@ # 7 テキスト処理 Web開発においてテキスト処理は非常に重要な要素です。往々にして出力または入力する内容に対して処理を行う必要があります。ここでのテキストには文字列、数字、Json、XML等々が含まれます。高性能な一言語としてのGo言語では、これらのテキストの処理はすべてオフィシャルの標準パッケージにサポートされています。また利用中にGo標準ライブラリが巧みに設計されていることに気がつくでしょう。またユーザからすれば非常に簡単にこれらのテキストを処理することができます。本章では4つの節を通してユーザにGo言語のテキスト処理のよい知識をご紹介したいきたいと思います。 -XMLは現在多くの標準インターフェースの対話型言語となっています。多くの場合Javaで書かれたwebserverとのやりとりはどれもXML標準にもとづいて行われます。7.1節ではどのようにXMLテキストを処理するかご紹介します。XMLを使用した後あまりに複雑だと気づきます。現在多くのインターネット企業の対外的なAPIでは多くがJSON形式を採用しています。この形式は描写が簡単ですが、意味をよく表現することができます。7.2節ではどのようにこういったJSON形式のデータを処理するかご説明します。正規表現は人に愛され、また恨まれる道具です。このテキスト処理能力は非常に協力です。我々は前のフォームの検証でその強力さをすでに味わっています。7.3節ではどのようにGoの正規表現を利用するのがよいかより詳しく解説していきます。Web開発において非常に重要な部分としてMVCの分離があります。Go言語ではWeb開発中Vにおいて`template`という専門的にサポートするパッケージがあります。7.4節ではテンプレートをつかってコンテンツをどのように出力するのか詳細に解説していきます。7.5節ではどのようにしてファイルとディレクトリを操作するのか詳しくご紹介します。7.6節の概要では文字列に関する操作についてご紹介します。 +XMLは現在多くの標準インターフェースの対話型言語となっています。多くの場合Javaで書かれたwebserverとのやりとりはどれもXML標準にもとづいて行われます。7.1節ではどのようにXMLテキストを処理するかご紹介します。XMLを使用した後あまりに複雑だと気づきます。現在多くのインターネット企業の対外的なAPIでは多くがJSON形式を採用しています。この形式は描写が簡単ですが、意味をよく表現することができます。7.2節ではどのようにこういったJSON形式のデータを処理するかご説明します。正規表現は人に愛され、また恨まれる道具です。このテキスト処理能力は非常に協力です。我々は前のフォームの検証でその強力さをすでに味わっています。7.3節ではどのようにGoの正規表現を利用するのがよいかより詳しく解説していきます。Web開発において非常に重要な部分としてMVCの分離があります。Go言語ではWeb開発中Vにおいて`template`という専門的にサポートするパッケージがあります。7.4節ではテンプレートをつかってコンテンツをどのように出力するのか詳細に解説していきます。7.5節ではどのようにしてファイルとディレクトリを操作するのか詳しくご紹介します。7.6節のまとめでは文字列に関する操作についてご紹介します。 ## 目次 ![](images/navi7.png?raw=true) ## links * [目次]() - * 前へ: [第六章概要](<06.5.md>) + * 前へ: [第六章まとめ](<06.5.md>) * 次へ: [XMLの処理](<07.1.md>) diff --git a/ja/ebook/07.4.md b/ja/ebook/07.4.md index f8df1f45..4ad39ce7 100644 --- a/ja/ebook/07.4.md +++ b/ja/ebook/07.4.md @@ -341,7 +341,7 @@ Webアプリケーションを作る時はテンプレートの一部が固定 >単一の集合のようなテンプレートは互いを知っています。もしあるテンプレートが複数の集合によって使用された場合、複数の集合の中で別々にパースされる必要があります。 -## 概要 +## まとめ テンプレートに対する上記の詳細な紹介で、どのようにして動的なデータとテンプレートを融合させるかご理解いただけたかと思います:ループしたデータの出力、関数を定義、テンプレートのネスト等々。テンプレートの技術を応用することで、MVCパターンのVの処理を完成させることができます。以降の章ではどのようにMとCを処理するかご紹介します。 ## links diff --git a/ja/ebook/07.6.md b/ja/ebook/07.6.md index 862a8609..381f5575 100644 --- a/ja/ebook/07.6.md +++ b/ja/ebook/07.6.md @@ -149,4 +149,4 @@ ## links * [目次]() * 前へ: [ファイルの操作](<07.5.md>) - * 次へ: [概要](<07.7.md>) + * 次へ: [まとめ](<07.7.md>) diff --git a/ja/ebook/08.0.md b/ja/ebook/08.0.md index 05794c38..45ec9c10 100644 --- a/ja/ebook/08.0.md +++ b/ja/ebook/08.0.md @@ -16,5 +16,5 @@ Go言語は21世紀のC言語です。性能と簡単さを追求するため、 ## links * [目次]() - * 次へ: [第七章概要](<07.7.md>) + * 次へ: [第七章まとめ](<07.7.md>) * 前へ: [Socketプログラミング](<08.1.md>) diff --git a/ja/ebook/08.1.md b/ja/ebook/08.1.md index 059d6c3a..5bc48fe6 100644 --- a/ja/ebook/08.1.md +++ b/ja/ebook/08.1.md @@ -386,7 +386,7 @@ UDPサーバがどのように処理するか見てみましょう; } } -## 概要 +## まとめ TCPとUDP Socketプログラミングの描写と実装を通して、GoはすでにSocketプログラミングを完全にサポートしていることがお分かりいただけたかと思います。使用に際してもとても便利です。Goはたくさんの関数を提供しています。これらの関数を使って簡単に高性能なSocketアプリケーションを書くことができます。 diff --git a/ja/ebook/08.3.md b/ja/ebook/08.3.md index abef201b..c904b3f5 100644 --- a/ja/ebook/08.3.md +++ b/ja/ebook/08.3.md @@ -106,7 +106,7 @@ GoにはRESTに対する直接のサポートはありません。しかし、RE 上のコードではどのようにRESTなアプリケーションを書くかご覧いただきました。我々がアクセスするリソースはユーザです。異なるmethodによって異なる関数にアクセスしました。ここではサードパーティライブラリ`github.com/drone/routes`を使用しています。前の章でどのように自分で定義したルータを実現するかご紹介しました。このライブラリは自分で定義したルートと便利なルートのルールを反映させます。これを使って簡単にRESTのフレームワークを実装することができます。 -## 概要 +## まとめ RESTはフレームワークスタイルの一種です。WWWの成功経験を汲み取っています:ステートレス、リソースを中心とし、HTTPプロトコルとURIプロトコルを十分利用しています。統一したインターフェース定義を提供し、Webサービスを設計する方法の一つとして流行しました。ある意味で、URIとHTTPといった黎明期のInternet標準を強調することで、RESTは大型のアプリケーションプログラムサーバ時代の前のWeb方式に回帰しています。現在GoはRESTに対するサポートはやはり簡単です。自分dね定義したルーティングを通して、異なるmethodに異なるhandleを実装することができます。このようにRESTのフレームワークは実現されています。 ## links diff --git a/ja/ebook/08.4.md b/ja/ebook/08.4.md index c81d9d59..a23e44a9 100644 --- a/ja/ebook/08.4.md +++ b/ja/ebook/08.4.md @@ -381,7 +381,7 @@ json-rpcはTCPプロトコルにもとづいて実装されていることがお } -## 概要 +## まとめ GoはすでにRPCに対して良いサポートを提供しています。上のHTTP、TCP、JSON RPCの実装を通して、多くの分散型のWebアプリケーションの開発を簡単に行うことができます。読者であるあなたはすでにここまでマスターしたものと思われます。ただ残念なことに現在GoはまだSOAP RPCのサポートを提供していません。幸い現在すでにサードパーティのオープンソースで実現されています。 @@ -389,4 +389,4 @@ GoはすでにRPCに対して良いサポートを提供しています。上の ## links * [目次]() * 前へ: [REST](<08.3.md>) - * 次へ: [概要](<08.5.md>) + * 次へ: [まとめ](<08.5.md>) diff --git a/ja/ebook/09.0.md b/ja/ebook/09.0.md index 378906e7..9a1a7e14 100644 --- a/ja/ebook/09.0.md +++ b/ja/ebook/09.0.md @@ -16,5 +16,5 @@ Webアプリケーションプログラムのセキュリティ問題の理由 ## links * [目次]() - * 前へ: [第八章概要](<08.5.md>) + * 前へ: [第八章まとめ](<08.5.md>) * 次へ: [CSRF攻撃の予防](<09.1.md>) diff --git a/ja/ebook/09.1.md b/ja/ebook/09.1.md index f037ff02..25ef0df6 100644 --- a/ja/ebook/09.1.md +++ b/ja/ebook/09.1.md @@ -84,7 +84,7 @@ tokenを検証 このように基本的には安全なPOSTを実現しました。しかしもしtokenのアルゴリズムが暴かれてしまったらと思われるかもしれません。しかし理論上は破られることは基本的に不可能です。ある人が計算したところ、この文字列を無理に破るにはだいたい2の11乗の時間が必要です。 -## 概要 +## まとめ クロスサイトリクエストフォージェリ、すなわちCSRFは非常に危険なWebセキュリティ問題です。Webセキュリティ界隈では"眠れる巨人"と呼ばれています。リスクレベルはこの"肩書き"を見ればお分かりでしょう。この節ではクロスサイトリクエストフォージェリの紹介にとどまらず、このようなセキュリティホールを生み出す原因の所在についても詳しくご説明しました。これでもって攻撃への防御を促し、読者に安全なWebアプリケーションを書いていただけますよう望んでいます。 ## links diff --git a/ja/ebook/09.2.md b/ja/ebook/09.2.md index b622a120..10f09127 100644 --- a/ja/ebook/09.2.md +++ b/ja/ebook/09.2.md @@ -63,7 +63,7 @@ CleanMap["username"] = username } -## 概要 +## まとめ データのフィルタリングはWebセキュリティにおいて基礎となる作用です。多くのセキュリティ問題はデータのフィルタリングと検証を行わなかったことによるものです。例えば前の節のCSRF攻撃と以降に説明するXSS攻撃、SQLインジェクション等はどれも真面目にデータをフィルタリングしなかった事によって引き起こされます。そのため、この部分の内容は特に重視する必要があります。 ## links diff --git a/ja/ebook/09.3.md b/ja/ebook/09.3.md index d7a45358..76a58de9 100644 --- a/ja/ebook/09.3.md +++ b/ja/ebook/09.3.md @@ -43,7 +43,7 @@ XSSに関するより詳しい分析は"[新浪微博XSS事件分析](http://www このようにすることでブラウザにhtmlを出力させずjavascriptコードを解釈させることができます。 -## 概要 +## まとめ XSSセキュリティホールはとても危険なものです。Webアプリケーションを開発している時、必ずデータをフィルタリングするよう肝に銘じておいてください。特にクライアントに出力する前に。これは現在のところXSSを防止する手段として有効です。 ## links diff --git a/ja/ebook/09.4.md b/ja/ebook/09.4.md index ebef3511..531dafb8 100644 --- a/ja/ebook/09.4.md +++ b/ja/ebook/09.4.md @@ -60,7 +60,7 @@ SQLインジェクション攻撃の被害はこれだけ大きく、どのよ 5. アプリケーションをデプロイする前になるべく専門のSQLインジェクション検査ツールを使って検査を行い、発見されたSQLインジェクションセキュリティホールにはすぐにパッチをあてる。ネット上ではこの方面のオープンソースツールがたくさんあります。例えばsqlmap、SQLninja等です。 6. ページがSQLのエラー情報を出力するのを避ける。例えば型のエラー、フィールドのミスマッチ等です。コードのSQLクエリが暴露されることで攻撃者がこれらのエラー情報を利用してSQLインジェクションを行うのを防ぎます。 -## 概要 +## まとめ 上の例によってSQLインジェクションは被害が相当大きいセキュリティホールであるとわかりました。そのため我々が通常書くWebアプリケーションに対してはどのような小さな事でも非常に重視する必要があります。小さな事が命運を分けます。生活も同じ、Webアプリケーションを書くことも同じです。 ## links diff --git a/ja/ebook/09.5.md b/ja/ebook/09.5.md index 2e76ad96..4e1c5019 100644 --- a/ja/ebook/09.5.md +++ b/ja/ebook/09.5.md @@ -77,7 +77,7 @@ Go言語のこの三種類の暗号化アルゴリズムの実装は以下の通 上の方法によってユニークな対応するパスワードの値を取得することができます。これは現在までもっともクラックが難しいものです。 -## 概要 +## まとめ ここまででもしあなたに危機感が芽生えたのだとすれば、行動すべきです: - 1)もし普通のユーザであれば、LastPassによってパスワードを保存/生成するのをおすすめします。異なるサイトで異なるパスワードを使用します。 diff --git a/ja/ebook/09.6.md b/ja/ebook/09.6.md index 4211fd0a..43a93b9d 100644 --- a/ja/ebook/09.6.md +++ b/ja/ebook/09.6.md @@ -112,11 +112,11 @@ Go言語の`crypto`では双方向暗号の高度な暗号化/復元パッケー この3つの関数は暗号化/復元操作を実現します。詳細な操作は上の例をご覧ください。 -## 概要 +## まとめ この節ではいくつかの暗号化/復元アルゴリズムをご紹介しました。Webアプリケーションを開発している時は要求に合わせて異なる方法によって暗号化/複合を行うことができます。一般的なアプリケーションではbase64アルゴリズムを採用することができます。より高度な場合はaesやdesアルゴリズムを採用することができます。 ## links * [目次]() * 前へ: [パスワードの保存](<09.5.md>) - * 次へ: [概要](<09.7.md>) + * 次へ: [まとめ](<09.7.md>) diff --git a/ja/ebook/10.0.md b/ja/ebook/10.0.md index f0f34cb0..ef45e46f 100644 --- a/ja/ebook/10.0.md +++ b/ja/ebook/10.0.md @@ -21,5 +21,5 @@ ## links * [目次]() - * 前へ: [第九章概要](<09.7.md>) + * 前へ: [第九章まとめ](<09.7.md>) * 次へ: [デフォルトロケールの設定](<10.1.md>) diff --git a/ja/ebook/10.1.md b/ja/ebook/10.1.md index 2d773311..67321228 100644 --- a/ja/ebook/10.1.md +++ b/ja/ebook/10.1.md @@ -76,7 +76,7 @@ URLアドレスをもっとRESTfulな見た目にしたいと思うかもしれ 当然ユーザにあなたが提供するセレクトボックスや他の何らかの方法で対応するlocaleを設定させることもできます。ユーザの入力した情報を、このアカウントに関連するprofileに保存し、ユーザが再度ログインした時にこの設定をlocale設定にコピーします。これによってこのユーザの毎回のアクセスで自分が以前に設定したlocaleをもとにページを取得するよう保証することができます。 -## 概要 +## まとめ 上のご紹介から、Localeの設定にはいくつもの方法があるとわかりました。要求の違いによって異なるLocaleの設定方法を選択する必要があります。ユーザが最もよく知る方法で我々が提供するサービスを得る事で、アプリケーションのユーザビリティを高めます。 ## links diff --git a/ja/ebook/10.2.md b/ja/ebook/10.2.md index f302f9d6..e693acb2 100644 --- a/ja/ebook/10.2.md +++ b/ja/ebook/10.2.md @@ -125,7 +125,7 @@ Localeの違いによってビューを表示させる場合もあるかもし このような方法を採用することでビューとリソースをローカライズすると、用意に拡張を行うことができます。 -## 概要 +## まとめ この節ではどのようにしてローカライズリソースを使用し、保存するかご紹介しました。ある時は置換関数によって実装する必要があり、またある時はlangによって設定する必要があります。しかし最終的にはどれもkey-valueの方法によってLocaleに対応したデータを保存することになります。必要な時に対応するLocaleの情報を取り出して、もしそれがてkしうと情報であれば直接出力し、もし時間や日時または通過であった場合は`fmtPrintf`を使ったりその他のフォーマッタ関数によって処理する必要があります。異なるLocaleのビューとリソースに対しては最も簡単で、パスにlangを追加するだけで実装することができます。 ## links diff --git a/ja/ebook/10.3.md b/ja/ebook/10.3.md index d2cb6cb5..dea1ecda 100644 --- a/ja/ebook/10.3.md +++ b/ja/ebook/10.3.md @@ -171,10 +171,10 @@ {{.V.Money | M}} -## 概要 +## まとめ この節を通して多言語パッケージのWebアプリケーションをどのようにして実現するかわかりました。カスタム言語パッケージでは便利に多言語を実装することができます。また、設定ファイルによって非常に簡単に複数の言語を拡張することもできます。デフォルトではgo-i18nはパブリックな設定ファイルをロードします。例えば時間、通貨等です。非常に簡単に使用することができ、同時にテンプレートにおいてこれらの関数をサポートするため、対応するテンプレート関数も実装しました。このようにしてWebアプリケーションを開発する際直接テンプレートにおいてpipelineの方法で多言語パッケージを操作することができます。 ## links * [目次]() * 前へ: [ローカライズリソース](<10.2.md>) - * 次へ: [概要](<10.4.md>) + * 次へ: [まとめ](<10.4.md>) diff --git a/ja/ebook/11.0.md b/ja/ebook/11.0.md index 517fb213..d99fa8f3 100644 --- a/ja/ebook/11.0.md +++ b/ja/ebook/11.0.md @@ -15,5 +15,5 @@ Webアプリケーションを開発するにあたって、エラーは避け ## links * [目次]() - * 前へ: [第十章概要](<10.4.md>) + * 前へ: [第十章まとめ](<10.4.md>) * 次へ: [エラー処理](<11.1.md>) diff --git a/ja/ebook/11.1.md b/ja/ebook/11.1.md index f1bd07ae..3ac48715 100644 --- a/ja/ebook/11.1.md +++ b/ja/ebook/11.1.md @@ -191,7 +191,7 @@ Goはエラー処理においてCに似た戻り値を検査する方法を採 上で示したとおり、viewにアクセスした際異なる状況によって異なるエラーコードとエラー情報を取得することができます。これははじめのバージョンに比べてコード量にさほど変化はありませんが、これが表示するエラーはよりわかりやすくなっています。提示されるエラー情報のユーザビリティが高められ、拡張性もはじめのものに比べてよくなっています。 -## 概要 +## まとめ プログラムの設計において障害の許容は重要な仕事の一部です。Goではエラー処理によってこれを実現します。errorはひとつのインターフェースに過ぎませんが、多くに変化させることができます。自分の需要に合わせて異なる処理を実装することができます。最後にご紹介したエラー処理の方法で、皆様によりよいWebエラーの処理の方法を設計するにあたってご助力になれば幸いです。 ## links diff --git a/ja/ebook/11.2.md b/ja/ebook/11.2.md index 1c6c1728..42c06e9d 100644 --- a/ja/ebook/11.2.md +++ b/ja/ebook/11.2.md @@ -240,7 +240,7 @@ GDBが実行している現在のプログラムの環境ではいくつかの goroutinesのコマンドを確認することでgoroutineの内部がどのように実行されているのか詳しく理解することができます。各関数のコールされる順番はすでにはっきり表示されています。 -## 概要 +## まとめ この章ではGDBデバッグにおけるGoプログラムの基本コマンドのいくつかをご紹介しました。`run`、`print`、`info`、`set variable`、`continue`、`list`、`break`といったよく使われるデバッグコマンドを含め、上のデモで行ったように、読者はすでにGoプログラムに対してGDBを使ったデバッグを基本的に理解したものと信じています。もしより多くのデバッグテクニックを知りたければオフィシャルのページのGDBデバッグの項目をご参照ください。 ## links diff --git a/ja/ebook/11.3.md b/ja/ebook/11.3.md index f5fe232a..b068a0f8 100644 --- a/ja/ebook/11.3.md +++ b/ja/ebook/11.3.md @@ -139,11 +139,11 @@ Go言語はあらかじめ用意されている軽量なテストフレームワ 上の結果は我々がどのような`TestXXX`なユニットテスト関数も実行していないことを示しています。表示される結果は耐久テスト関数のみを実行しただけです。第一行には`Benchmark_Division`が500000000回実行され示し、毎回の実行が平均で7.76ミリ秒であったことを示しています。第二行は`Benchmark_TimeConsumingFunctin`が500000000回実行され、毎回の平均実行時間が7.80ミリ秒であったことを示しています。最後の1行は全体の実行時間を示しています。 -## 概要  +## まとめ  上のユニットテストと耐久テストの学習を通じて、`testing`パッケージが非常に軽量で、ユニットテストと耐久テストを書くのは非常に簡単であるとわかりました。ビルトインの`go test`コマンドを組み合わせることで、非常に便利にテストを行うことができます。このように我々が毎回コードを修正し終わる度に、go testを実行するだけで簡単に回帰テストを行うことができます。 ## links * [目次]() * 前へ: [GDBを使用したデバッグ](<11.2.md>) - * 次へ: [概要](<11.4.md>) + * 次へ: [まとめ](<11.4.md>) diff --git a/ja/ebook/12.0.md b/ja/ebook/12.0.md index 34948d50..f05a1536 100644 --- a/ja/ebook/12.0.md +++ b/ja/ebook/12.0.md @@ -7,5 +7,5 @@ ## links * [目次]() - * 前へ: [第十一章概要](<11.4.md>) + * 前へ: [第十一章まとめ](<11.4.md>) * 次へ: [アプリケーションログ](<12.1.md>) diff --git a/ja/ebook/12.1.md b/ja/ebook/12.1.md index c15adc72..7dda8e08 100644 --- a/ja/ebook/12.1.md +++ b/ja/ebook/12.1.md @@ -157,7 +157,7 @@ seelogはカスタムなログ処理の定義をサポートしています。 このような方法によって簡単に対応する情報を探し出すことができます。これにはアプリケーションログに対して統計と分析を行えるという利点があります。また、ログのサイズを考慮する必要もあります。高トラフィックのWebアプリケーションにとって、ログの増加は恐るべきものです。そのため、seelogの設定ファイルでlogrotateを設定することで、ログファイルが絶え間なく増大し我々のディスクスペースが足りなくなるといった問題を引き起こさないよう保証することができます。 -## 概要 +## まとめ 上のseelogシステムとこれに基づいてどのようにログシステムを定義するかを学ぶことによって、非常に気軽に強力で適切な機能を持つログシステムを作成できることができました。ログシステムはデータ分析に信用できるデータソースを提供します。例えばログの分析を通して、システムをより一歩改善することができますし、アプリケーションに問題が発生した時に問題の位置を特定しやすくなります。また、seelogはログのレベル分け機能もサポートしています。minlevelの設定によって簡単にテストや配布版の出力情報のレベルを設定することができます。 ## links diff --git a/ja/ebook/12.2.md b/ja/ebook/12.2.md index 6ba2539d..3e1c0d05 100644 --- a/ja/ebook/12.2.md +++ b/ja/ebook/12.2.md @@ -116,7 +116,7 @@ 上ではエラーと例外の区別をご紹介しました。我々がプログラムを開発する時はどのように設計すべきでしょうか?ルールは非常に簡単です:もしあなたが定義した関数が失敗する可能性があるなら、エラーを返さなければなりません。他のpackageの関数をコールする時、もしこの関数の実装がとてもよい場合、panicの心配をする必要もありません。本当に例外を発生させなければならない状況ではないのに発生させてしまっているにしても、私がこれを処理するいわれはないはずです。panicとrecoverは自分が開発したpackageで実装されたロジックや、特殊な状況に対して設計されます。 -## 概要 +## まとめ この節では我々のWebアプリケーションをデプロイした後どのようにして各種のエラーを処理するかについてまとめました:ネットワークエラー、データベースエラー、オペレーティングシステムのエラー等、エラーが発生した際、我々のプログラムはどのようにして正しく処理するのでしょうか:ユーザフレンドリーなエラーインターフェースを表示し、操作をロールバックし、ログを記録し、管理者に通知するといった操作を行います。最後にどのようにしてエラーと例外を正しく処理するかについてご紹介しました。一般的なプログラムにおいてはエラーと例外はよく混同されます。しかし、Goではエラーと例外は常に明確な区別がなされます。そのため、我々がプログラムを設計するにあたってエラーと例外を処理する際はどのような原則に従うべきかについてご紹介しました。 ## links * [目次]() diff --git a/ja/ebook/12.3.md b/ja/ebook/12.3.md index 241a0dd4..a3cb3107 100644 --- a/ja/ebook/12.3.md +++ b/ja/ebook/12.3.md @@ -171,7 +171,7 @@ Supervisordをインストールするとsupervisorとsupervisorctlという2つ - supervisorctl stop all、すべてのプロセスを停止します。注:start、restart、stopは最新の設定ファイルを読み込みません。 - supervisorctl reload、最新の設定ファイルを読み込み、新しい設定に沿ってすべてのプロセスを起動、管理します。 -## 概要 +## まとめ この節ではGoがどのようにdaemon化を実現しているのかについてご紹介しました。ただ現在Goのdaemon実装は不足しており、サードパーティのツールによるアプリケーションプログラムのdaemon管理を行う方法に頼る必要があります。そのためここではpythonで書かれたプロセス管理ツールSupervisordをご紹介しました。Supervisordを使って簡単にGoアプリケーションプログラムを管理することができます。 diff --git a/ja/ebook/12.4.md b/ja/ebook/12.4.md index 4387a314..c9d3c770 100644 --- a/ja/ebook/12.4.md +++ b/ja/ebook/12.4.md @@ -165,10 +165,10 @@ redisのリストアはホットバックアップとコールドバックアッ しかし時にはコールドバックアップによってデータをリストアする必要もあります。redisのコールドバックアップは実は保存されたデータベースファイルをredisのワーキングディレクトリにコピーするだけです。その後redisを起動すればOKです。redisは起動している間自動的にデータベースファイルをメモリにロードします。起動の速度はデータベースのファイルの大小によって決定します。 -## 概要 +## まとめ この節ではアプリケーションのバックアップとリストアについてご紹介しました。ファイルのバックアップからデータベースのバックアップまで、どのように災害に対応するかです。また、rsyncを使った異なるシステムでのファイルの同期についてもご紹介しました。MySQLデータベースとredisデータベースのバックアップとリストアです。この節の紹介を通して開発された本番プロダクトの障害に対するひとつの参考になれば幸いです。 ## links * [目次]() * 前へ: [アプリケーションのデプロイ](<12.3.md>) - * 次へ: [概要](<12.5.md>) + * 次へ: [まとめ](<12.5.md>) diff --git a/ja/ebook/13.0.md b/ja/ebook/13.0.md index 18595666..415d9fbf 100644 --- a/ja/ebook/13.0.md +++ b/ja/ebook/13.0.md @@ -8,5 +8,5 @@ ## links * [目次]() - * 前へ: [第12章概要](<12.5.md>) + * 前へ: [第12章まとめ](<12.5.md>) * 次へ: [プロジェクトのプラン](<13.1.md>) diff --git a/ja/ebook/13.1.md b/ja/ebook/13.1.md index 5d157fed..e26589c6 100644 --- a/ja/ebook/13.1.md +++ b/ja/ebook/13.1.md @@ -45,7 +45,7 @@ ## フレームワーク設計 ブログの迅速な作成を実現するため、上のプロセス設計に従って最小化されたフレームワークを開発します。フレームワークにはルーティング機能、RESTをサポートしたコントローラ、自動化とテンプレートの適用、ログシステム、設定管理等が含まれます。 -## 概要 +## まとめ この節ではブログシステムにおいてGOPATHを設定するところからディレクトリの作成といった基礎情報までをご紹介しました。フレームワークの構造がMVCモードを採用することや、ブログシステムのデータフローの実行プロセスについても簡単にご紹介しました。最後にこれらのプロセスを通じてブログシステムのディレクトリ構造を設計しました。ここまでで、フレームワークの基本的な作成が完了しました。以降のいくつかの節ではひとつひとつ実装していきます。 ## links * [目次]() diff --git a/ja/ebook/13.5.md b/ja/ebook/13.5.md index fb4f320a..4cd8546b 100644 --- a/ja/ebook/13.5.md +++ b/ja/ebook/13.5.md @@ -255,4 +255,4 @@ edit.tpl ## links * [目次]() * 前へ: [ログとコンフィグ設計](<13.4.md>) - * 次へ: [概要](<13.6.md>) + * 次へ: [まとめ](<13.6.md>) diff --git a/ja/ebook/14.0.md b/ja/ebook/14.0.md index 737e2d90..a51323ec 100644 --- a/ja/ebook/14.0.md +++ b/ja/ebook/14.0.md @@ -8,5 +8,5 @@ ## links * [目次]() - * 前へ: [第13章概要](<13.6.md>) + * 前へ: [第13章まとめ](<13.6.md>) * 次へ: [静的なファイルのサポート](<14.1.md>) diff --git a/ja/ebook/14.6.md b/ja/ebook/14.6.md index af2d94bd..b5cb0820 100644 --- a/ja/ebook/14.6.md +++ b/ja/ebook/14.6.md @@ -102,4 +102,4 @@ goroutineをクリックすると詳細な情報を得ることができます ## links * [目次]() * 前へ: [多言語サポート](<14.5.md>) - * 次へ: [概要](<14.7.md>) + * 次へ: [まとめ](<14.7.md>) diff --git a/ja/ebook/preface.md b/ja/ebook/preface.md index 9ef1d440..275b0665 100644 --- a/ja/ebook/preface.md +++ b/ja/ebook/preface.md @@ -3,7 +3,7 @@ - 1.2. [GOPATHとワーキングディレクトリ](01.2.md) - 1.3. [Goのコマンド](01.3.md) - 1.4. [Goの開発ツール](01.4.md) - - 1.5. [概要](01.5.md) + - 1.5. [まとめ](01.5.md) * 2.[Go言語の基礎](02.0.md) - 2.1. [こんにちは、Go](02.1.md) - 2.2. [Goの基礎](02.2.md) @@ -12,20 +12,20 @@ - 2.5. [オブジェクト指向](02.5.md) - 2.6. [interface](02.6.md) - 2.7. [マルチスレッド](02.7.md) - - 2.8. [概要](02.8.md) + - 2.8. [まとめ](02.8.md) * 3.[Webの基礎](03.0.md) - 3.1 [webでの作業方法](03.1.md) - 3.2 [Goで簡単なwebサーバを立てる](03.2.md) - 3.3 [Goはどのようにしてweb作業を行うか](03.3.md) - 3.4 [Goのhttpパッケージ詳細](03.4.md) - - 3.5 [概要](03.5.md) + - 3.5 [まとめ](03.5.md) * 4.[フォーム](04.0.md) - 4.1 [フォームの入力を処理する](04.1.md) - 4.2 [フォームに入力された内容の検証](04.2.md) - 4.3 [クロスサイトスクリプティングの予防](04.3.md) - 4.4 [フォームの複数回送信の防止](04.4.md) - 4.5 [ファイルのアップロード処理](04.5.md) - - 4.6 [概要](04.6.md) + - 4.6 [まとめ](04.6.md) * 5.[データベースへのアクセス](05.0.md) - 5.1 [database/sqlインターフェース](05.1.md) - 5.2 [MySQL データベースの使用](05.2.md) @@ -33,13 +33,13 @@ - 5.4 [PostgreSQLデータベースの使用](05.4.md) - 5.5 [beedbライブラリを使用してORM開発を行う](05.5.md) - 5.6 [NOSQLデータベースの操作](05.6.md) - - 5.7 [概要](05.7.md) + - 5.7 [まとめ](05.7.md) * 6.[sessionとデータの保存](06.0.md) - 6.1 [sessionとcookie](06.1.md) - 6.2 [Goはどのようにしてsessionを使用するか](06.2.md) - 6.3 [sessionストレージ](06.3.md) - 6.4 [sessionハイジャックの予防](06.4.md) - - 6.5 [概要](06.5.md) + - 6.5 [まとめ](06.5.md) * 7.[テキスト処理](07.0.md) - 7.1 [XMLの処理](07.1.md) - 7.2 [JSONの処理](07.2.md) @@ -47,13 +47,13 @@ - 7.4 [テンプレートの処理](07.4.md) - 7.5 [ファイルの操作](07.5.md) - 7.6 [文字列の処理](07.6.md) - - 7.7 [概要](07.7.md) + - 7.7 [まとめ](07.7.md) * 8.[Webサービス](08.0.md) - 8.1 [Socketプログラミング](08.1.md) - 8.2 [WebSocket](08.2.md) - 8.3 [REST](08.3.md) - 8.4 [RPC](08.4.md) - - 8.5 [概要](08.5.md) + - 8.5 [まとめ](08.5.md) * 9.[セキュリティと暗号化](09.0.md) - 9.1 [CSRF攻撃の予防](09.1.md) - 9.2 [入力フィルタリングの確保](09.2.md) @@ -61,30 +61,30 @@ - 9.4 [SQLインジェクションの回避](09.4.md) - 9.5 [パスワードの保存](09.5.md) - 9.6 [データを暗号化/復元する](09.6.md) - - 9.7 [概要](09.7.md) + - 9.7 [まとめ](09.7.md) * 10.[国際化とローカライズ](10.0.md) - 10.1 [デフォルトロケールの設定](10.1.md) - 10.2 [ローカライズリソース](10.2.md) - 10.3 [国際化サイト](10.3.md) - - 10.4 [概要](10.4.md) + - 10.4 [まとめ](10.4.md) * 11.[エラー処理、デバッグとテスト](11.0.md) - 11.1 [エラー処理](11.1.md) - 11.2 [GDBを使用したデバッグ](11.2.md) - 11.3 [Goによるテスト例](11.3.md) - - 11.4 [概要](11.4.md) + - 11.4 [まとめ](11.4.md) * 12.[デプロイとメンテナンス](12.0.md) - 12.1 [アプリケーションログ](12.1.md) - 12.2 [サイトのエラー処理](12.2.md) - 12.3 [アプリケーションのデプロイ](12.3.md) - 12.4 [バックアップとリストア](12.4.md) - - 12.5 [概要](12.5.md) + - 12.5 [まとめ](12.5.md) * 13.[どのようにしてWebフレームワークを設計するか](13.0.md)  - 13.1 [プロジェクトプラン](13.1.md)  - 13.2 [カスタムルータの設計](13.2.md) - 13.3 [controllerの設計](13.3.md) - 13.4 [ログとデプロイ設計](13.4.md) - 13.5 [ブログの追加/削除/修正の実装](13.5.md) - - 13.6 [概要](13.6.md)  + - 13.6 [まとめ](13.6.md)  * 14.[Webフレームワークの拡張](14.0.md) - 14.1 [静的ファイルのサポート](14.1.md) - 14.2 [Sessionのサポート](14.2.md) @@ -92,5 +92,5 @@ - 14.4 [ユーザ認証](14.4.md) - 14.5 [多言語サポート](14.5.md) - 14.6 [pprofのサポート](14.6.md) - - 14.7 [概要](14.7.md) + - 14.7 [まとめ](14.7.md) * 付録A [参考資料](ref.md) From 148c88f08de89c19ff537a1dcf30ad17d29dc5ef Mon Sep 17 00:00:00 2001 From: Hirofumi Tamori Date: Sat, 30 Aug 2014 23:41:28 +0900 Subject: [PATCH 14/89] Modified Japanese translation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Is "我们经常遇到生成文件目录,文件(夹)编辑等操作" the typo of "我们经常遇到生成文件目录(夹),文件编辑等操作"? Also, in os.RemoveAll, what does "单个名称" mean? --- ja/ebook/07.5.md | 6 +++--- ja/ebook/14.7.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ja/ebook/07.5.md b/ja/ebook/07.5.md index bd3e31f8..65dc8d2f 100644 --- a/ja/ebook/07.5.md +++ b/ja/ebook/07.5.md @@ -1,5 +1,5 @@ # 7.5 ファイルの操作 -どのようなコンピュータ設備でも、ファイルは必要です。またWebプログラミングでは、ファイルの操作はWebプログラマがよくぶつかる問題です。ファイルの操作はWebアプリケーションにおいて必須で、非常に有用です。我々はよくディレクトリ、ファイル(フォルダ)の編集といった操作を生成することになります。ここではGoによるこれらの操作に対して詳細な概要を作成し、どのように使用するか実例をお見せします。 +どのようなコンピュータ設備でもファイルは必要です。またWebプログラミングではファイルの操作はWebプログラマがよくぶつかる問題です。ファイルの操作はWebアプリケーションにおいて必須で、非常に有用です。我々はよくディレクトリ(フォルダ)の生成、ファイルの編集といった操作をすることになります。ここではGoによるこれらの操作をいくつかかいつまんで詳細に説明し、どのように使用するか実例をお見せします。 ## ディレクトリの操作 ファイル操作の大部分の関数はどれもosパッケージにあります。以下にいくつかディレクトリの操作を行うものを挙げます: @@ -17,10 +17,10 @@ - func RemoveAll(path string) error - pathに従って階層的なサブディレクトリを削除します。たとえばpathがひとつの名前であれば、、このディレクトリは削除されません。 + pathに従って階層的なサブディレクトリを削除します。たとえばpathがひとつの名前であれば、このディレクトリは削除されません。 -以下はデモコード: +以下はコード例です: package main diff --git a/ja/ebook/14.7.md b/ja/ebook/14.7.md index 96abef99..3d6ad460 100644 --- a/ja/ebook/14.7.md +++ b/ja/ebook/14.7.md @@ -1,5 +1,5 @@ # 14.7 まとめ -この章は主にどのようにしてbeegoフレームワークにもとづいて展開を行うかについて詳しく述べました。これには静的なファイルのサポートが含まれます。静的なファイルでは主にどのようにしてbeegoを利用して素早くウェブページを開発するか、bootstrapを利用して美しいサイトの作成についてご紹介しました;2つ目の概要ではどのようにしてbeegoにおいてsessionManagerを構成するかについてご紹介しました。これはユーザがbeegoを利用した時に素早くsessionを利用するのに便利です;第3章の概要ではフォームとバリデーションについてご紹介しました。Go言語のstructの定義に基づくと、Webを開発する過程で重複する作業から解放されます。また、バリデーションを追加するとできるかぎりデータを安全にすることができます。第4章の概要ではユーザの認証についてご紹介しました。ユーザの認証は主に3つの需要があります。http basicとhttp digest認証、サードパーティ認証、カスタム定義の認証です。コードを用いてどのようにして現在あるサードパーティパッケージからbeegoアプリケーションでこれらの認証を実装するのかデモを行いました。第5章のがいようでは多言語サポートをご紹介しました。beegoではgo-i18nという多言語パッケージを使用しています。ユーザはとても簡単にこのライブラリを利用して多言語Webアプリケーションを開発することができます。第6章ではどのようにしてGoのpprofパッケージを利用するのかご紹介しました。pprofパッケージは性能テストに使われるツールです。beegoに対する改造を施した後pprofパッケージを使うことでユーザはpprofからbeegoにもとづいて開発されたアプリケーションのテストを行うことができます。これら6つの章を通して比較的健全なbeegoフレームワークを展開してきました。このフレームワークは現在の数多くのWebアプリケーションに十分対応することができます。ユーザは自身の相続力を継続して発揮することができます。私はここで簡単にいくつか重要と思われる拡張についてご紹介したにすぎません。 +この章は主にどのようにしてbeegoフレームワークにもとづいて展開を行うかについて詳しく述べました。これには静的なファイルのサポートが含まれます。第1節では静的なファイルでは主にどのようにしてbeegoを利用して素早くウェブページを開発するか、bootstrapを利用して美しいサイトの作成についてご紹介しました;第2節ではどのようにしてbeegoにおいてsessionManagerを構成するかについてご紹介しました。これはユーザがbeegoを利用した時に素早くsessionを利用するのに便利です;第3節ではフォームとバリデーションについてご紹介しました。Go言語のstructの定義に基づくと、Webを開発する過程で重複する作業から解放されます。また、バリデーションを追加するとできるかぎりデータを安全にすることができます。第4節ではユーザの認証についてご紹介しました。ユーザの認証は主に3つの需要があります。http basicとhttp digest認証、サードパーティ認証、カスタム定義の認証です。コードを用いてどのようにして現在あるサードパーティパッケージからbeegoアプリケーションでこれらの認証を実装するのかデモを行いました。第5節では多言語サポートをご紹介しました。beegoではgo-i18nという多言語パッケージを使用しています。ユーザはとても簡単にこのライブラリを利用して多言語Webアプリケーションを開発することができます。第6節ではどのようにしてGoのpprofパッケージを利用するのかご紹介しました。pprofパッケージは性能テストに使われるツールです。beegoに対する改造を施した後pprofパッケージを使うことでユーザはpprofからbeegoにもとづいて開発されたアプリケーションのテストを行うことができます。これら6つの節を通して比較的健全なbeegoフレームワークを展開してきました。このフレームワークは現在の数多くのWebアプリケーションに十分対応することができます。ユーザは自身の相続力を継続して発揮することができます。私はここで簡単にいくつか重要と思われる拡張についてご紹介したにすぎません。 ## links * [目次]() From 0f87590b899a36f887ab5477abf3fe8b51f51032 Mon Sep 17 00:00:00 2001 From: astaxie Date: Sun, 31 Aug 2014 00:26:04 +0800 Subject: [PATCH 15/89] update the description for the os.RemoveAll --- ebook/07.5.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ebook/07.5.md b/ebook/07.5.md index 6463e927..a059ab47 100644 --- a/ebook/07.5.md +++ b/ebook/07.5.md @@ -17,7 +17,7 @@ - func RemoveAll(path string) error - 根据path删除多级子目录,如果path是单个名称,那么该目录不删除。 + 根据path删除多级子目录,如果path是单个名称,那么该目录下的子目录全部删除。 下面是演示代码: @@ -150,4 +150,4 @@ Go语言里面删除文件和删除文件夹是同一个函数 ## links * [目录]() * 上一节: [模板处理](<07.4.md>) - * 下一节: [字符串处理](<07.6.md>) \ No newline at end of file + * 下一节: [字符串处理](<07.6.md>) From bfb8dcaff3e8678df68be5807c37a5b47616b0f0 Mon Sep 17 00:00:00 2001 From: astaxie Date: Sun, 31 Aug 2014 00:29:52 +0800 Subject: [PATCH 16/89] fix #352 --- ebook/07.6.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebook/07.6.md b/ebook/07.6.md index 57a4b9a5..b2383106 100644 --- a/ebook/07.6.md +++ b/ebook/07.6.md @@ -65,7 +65,7 @@ - func Trim(s string, cutset string) string - 在s字符串中去除cutset指定的字符串 + 在s字符串的头部和尾部去除cutset指定的字符串 fmt.Printf("[%q]", strings.Trim(" !!! Achtung !!! ", "! ")) //Output:["Achtung"] From 6ba5a5fcef5a8e6080596ac2cd3b5186a2dd0168 Mon Sep 17 00:00:00 2001 From: astaxie Date: Sun, 31 Aug 2014 00:31:33 +0800 Subject: [PATCH 17/89] update the go-sql-driver upper to lower fix #351 --- ebook/05.2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ebook/05.2.md b/ebook/05.2.md index b70f192e..7a94b5cf 100644 --- a/ebook/05.2.md +++ b/ebook/05.2.md @@ -37,7 +37,7 @@ Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持data package main import ( - _ "github.com/Go-SQL-Driver/MySQL" + _ "github.com/go-sql-driver/mysql" "database/sql" "fmt" //"time" @@ -114,7 +114,7 @@ Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持data 关键的几个函数我解释一下: -sql.Open()函数用来打开一个注册过的数据库驱动,Go-MySQL-Driver中注册了mysql这个数据库驱动,第二个参数是DSN(Data Source Name),它是Go-MySQL-Driver定义的一些数据库链接和配置信息。它支持如下格式: +sql.Open()函数用来打开一个注册过的数据库驱动,go-sql-driver中注册了mysql这个数据库驱动,第二个参数是DSN(Data Source Name),它是go-sql-driver定义的一些数据库链接和配置信息。它支持如下格式: user@unix(/path/to/socket)/dbname?charset=utf8 user:password@tcp(localhost:5555)/dbname?charset=utf8 From d0cf4af651354a785c821b7887cf2ca55ec83450 Mon Sep 17 00:00:00 2001 From: Hirofumi Tamori Date: Sun, 31 Aug 2014 01:40:56 +0900 Subject: [PATCH 18/89] Fix typo, modify Japanese expression MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix typo, modify Japanese expression. "復元" also means decrypt in Japanese, however more precisely, the word "復号" is used as the technical term. (People often use "復号化" but it is not correct when I split hairs;)) --- ja/ebook/08.0.md | 6 +++--- ja/ebook/08.1.md | 4 ++-- ja/ebook/08.2.md | 2 +- ja/ebook/08.3.md | 4 ++-- ja/ebook/08.4.md | 4 ++-- ja/ebook/09.2.md | 1 - ja/ebook/09.4.md | 2 +- ja/ebook/09.5.md | 2 +- ja/ebook/09.6.md | 22 +++++++++++----------- ja/ebook/11.1.md | 2 +- ja/ebook/preface.md | 2 +- 11 files changed, 25 insertions(+), 26 deletions(-) diff --git a/ja/ebook/08.0.md b/ja/ebook/08.0.md index 45ec9c10..eea18c9f 100644 --- a/ja/ebook/08.0.md +++ b/ja/ebook/08.0.md @@ -1,5 +1,5 @@ # 8 Webサービス -WebサービスではHTTPプロトコルの基礎の上にXMLまたはJSONを使って情報を交換することができるようになります。もし上海の天気予報を知りたかったり、チャイナペトロの株価やタオバオの商店にある商品の情報を知りたかったりすると、簡単なコードを少し書くことで、これらの情報を取得し、標準のインターフェースに開放することができます。ローカルで関数をコールし、値をひとつ返すのと同じようなものです。 +WebサービスではHTTPプロトコルの基礎の上にXMLまたはJSONを使って情報を交換することができるようになります。もし上海の天気予報やチャイナペトロの株価やタオバオの商店にある商品の情報を知りたいとすると、簡単なコードを少し書くことでこれらの情報を標準的なオープンインターフェースを介して取得することができます。ローカルで関数をコールすると値をひとつ返すのと同じようなものです。 Webサービスのバックエンドのキーはプラットフォームに依存しないことです。あなたはあなたのサービスをLinuxシステムで実行してもかまいませんし、他のWindowsのasp.netプログラムと交互に同様に一つのインターフェースを通じてFreeBSD上で実行されているJSPとなんの障害も無く通信することもできます。 @@ -7,9 +7,9 @@ Webサービスのバックエンドのキーはプラットフォームに依 RESTリクエストはとても直感的です。なぜならRESTはHTTPプロトコルに基いた追加だからです。各リクエストはどれもHTTPリクエストです。異なるmethodに従って異なるロジックを処理します。多くのWeb開発者はいずれもHTTPプロトコルに詳しいので、RESTを学ぶことは比較的簡単でしょう。ですので我々は8.3節においてどのようにGo言語でRESTメソッドを実装するか詳細にご紹介します。 -SOAPはW3Cのネットワークを超えた情報伝達とリモートコンピュータの関数コール方面の標準のひとつです。しかしSOAPはとても複雑で、完全な規則は非常に長くなります。また内容はいまでも増加しています。Go言語は簡単さで有名ですので、SOAPのような複雑なものはここではご紹介しません。Go言語は生まれながらにしてとても良い、開発に便利なRPCメカニズムを提供しています。8.4節ではどのようにしてGo言語を使ってRPCを実装するか詳しくご紹介するつもりです。 +SOAPはW3Cのネットワークを超えた情報伝達とリモートコンピュータの関数呼び出し規約の標準のひとつです。しかしSOAPはとても複雑で、完全な規則は非常に長くなります。また内容はいまでも増加しています。Go言語は簡単さで有名ですのでSOAPのような複雑なものはここではご紹介しません。Go言語は生まれながらにしてとても良い、開発に便利なRPCメカニズムを提供しています。8.4節ではどのようにしてGo言語を使ってRPCを実装するか詳しくご紹介するつもりです。 -Go言語は21世紀のC言語です。性能と簡単さを追求するため、8.1節ではどのようにしてSocketプログラミングを行うかご説明します。多くのゲームサービスはどれもSocketを採用してサーバをプログラムしています。HTTPプロトコルは比較的性能を必要とするものですので、Go言語がどのようにしてSocketプログラミングを行うのか見てみることにしましょう。現在HTML5の発展にしたがって、webSocketsも多くのゲーム会社が引き続き開発する手段の一つとなりつつあります。8.2節ではGo言語でどのようにしてwebSocketsのコードをプログラムするかご説明します。 +Go言語は21世紀のC言語です。性能と簡単さを追求するため、8.1節ではどのようにしてSocketプログラミングを行うかご説明します。多くのゲームサービスはどれもSocketを採用してサーバをプログラムしています。HTTPプロトコルは比較的性能を必要とするものですので、Go言語がどのようにしてSocketプログラミングを行うのか見てみることにしましょう。現在HTML5の発展にしたがって、WebSocketも多くのゲーム会社が引き続き開発する手段の一つとなりつつあります。8.2節ではGo言語でどのようにしてWebSocketのコードをプログラムするかご説明します。 ## 目次 ![](images/navi8.png?raw=true) diff --git a/ja/ebook/08.1.md b/ja/ebook/08.1.md index 5bc48fe6..5f87b238 100644 --- a/ja/ebook/08.1.md +++ b/ja/ebook/08.1.md @@ -1,5 +1,5 @@ # 8.1 Socketプログラミング -多くの低レイヤのネットワークアプリケーションの開発者の目には一切のプログラムがどれもSocketのように映ります。すこし大げさかもしれませんが、だいたいこのようなものです。現在のネットワークプログラミングはほぼすべてにおいてSocketを使用してプログラムされています。このような場面を考えたことはありませんか?毎日ブラウザを開いてページを閲覧する際、ブラウザプロセスはどのようにしてWebサーバと通信を行なっているのでしょう?QQを使ってチャットする時、QQプロセスはどのようにしてサーバまたはあなたの友達がいるQQプロセスと通信を行なっているのでしょう?PPstreamを開いてストリーミング映像を見るとき、PPstreamプロセスはどのようにして動画サーバと通信をおこなっているのでしょう?このように、すべてはSocketに依存して通信を行なっています。ひとつを見てすべてを理解すると、Socketプログラミングは現代のプログラミングの中でも非常に多くの重要な地位を占めていることが見て取れます。この章ではGo言語においてどのようにSocketプログラミングを行うのかご紹介します。 +多くの低レイヤのネットワークアプリケーションの開発者の目には一切のプログラムがどれもSocketのように映ります。すこし大げさかもしれませんが、だいたいこのようなものです。現在のネットワークプログラミングはほぼすべてにおいてSocketを使用してプログラムされています。このような場面を考えたことはありませんか?毎日ブラウザを開いてページを閲覧する際、ブラウザプロセスはどのようにしてWebサーバと通信を行っているのでしょう?QQを使ってチャットする時、QQプロセスはどのようにしてサーバまたはあなたの友達がいるQQプロセスと通信を行なっているのでしょう?PPstreamを開いてストリーミング映像を見るとき、PPstreamプロセスはどのようにして動画サーバと通信を行っているのでしょう?このように、すべてはSocketに依存して通信を行なっています。ひとつを見てすべてを理解すると、Socketプログラミングは現代のプログラミングの中でも非常に多くの重要な地位を占めていることが見て取れます。この章ではGo言語においてどのようにSocketプログラミングを行うのかご紹介します。 ## Socketとは何か? SocketはUnixを起源とします。Unixの基本哲学の一つは"すべてはファイルである"です。すべては"開くopen -> 読み書きwrite/read -> 閉じるclose"のパターンによって操作されます。Socketはこのパターンの実装の一つです。ネットワークのSocketデータ通信は特殊なI/Oの一つです。Socketもファイルディスクリプタの一種です。Socketもファイルを開く関数を持っています:Socket()。この関数はint型のSocketディスクリプタを返します。以後の接続の確立によってデータ転送といった操作はすべてこのSocketを通ることで実現されます。 @@ -10,7 +10,7 @@ SocketはUnixを起源とします。Unixの基本哲学の一つは"すべて ![](images/8.1.socket.png?raw=true) -图8.1 七層のネットワークプロトコルの図 +図8.1 七階層のネットワークプロトコルの図 TCP/IPプロトコルを使用したアプリケーションプログラムは通常アプリケーションプログラムのポートを採用します:UNIX BSDのソケット(socket)とUNIX System VのTLI(すでに淘汰されています)によってネットワークプロセス間の通信を実現します。現在ではほぼすべてのアプリケーションプログラムではsocketが採用されています。現在はネットワーク時代で、ネットワークのプロセス通信はどこにでも存在します。"すべてがSocket"というのはこういうことです。 diff --git a/ja/ebook/08.2.md b/ja/ebook/08.2.md index bd1989d6..bf4e6253 100644 --- a/ja/ebook/08.2.md +++ b/ja/ebook/08.2.md @@ -142,7 +142,7 @@ WebSocketはクライアントとサーバに分けられます。ここでは 図8.4 WebSocketサーバが受け取った情報 -上の例でクライアントとサーバでWebSocketを実装するのが非常に簡単だとわかりました。Goのソースコードのnetブランチではすでにこのプロトコルが実装されており、直接持ってきて使用することができます。現在HTML5の発展にしたがって将来WebSocketがWeb開発の充填になると考えています。我々はこの方面の知識を蓄える必要があります。 +上の例でクライアントとサーバでWebSocketを実装するのが非常に簡単だとわかりました。Goのソースコードのnetブランチではすでにこのプロトコルが実装されており、直接持ってきて使用することができます。現在HTML5の発展にしたがって将来WebSocketがWeb開発にとって重要になると考えています。我々はこの方面の知識を蓄える必要があります。 ## links diff --git a/ja/ebook/08.3.md b/ja/ebook/08.3.md index c904b3f5..b78a882d 100644 --- a/ja/ebook/08.3.md +++ b/ja/ebook/08.3.md @@ -1,7 +1,7 @@ # 8.3 REST RESTful、とは現在もっとも流行しているインターネットソフトウェアフレームワークです。構造が明瞭で、標準に合っており、理解しやすく、拡張に便利です。そのため、まさに多くのホームページで採用されつつあります。この節ではこれが一体どのようなフレームワークなのか、Goではどのようにして実現するのかを学んでいきます。 ## RESTとは何か -REST(Representational State Transfer)という概念は2000年Roy Thomas Fielding(彼はHTTPルールの主な編集者の一人です。)の博士論文の中で現れました。この中ではあるフレームワークの制約条件と原則について触れています。これらの制約条件と原則を満足したアプリケーションまたは設計はRESTfulということです。 +REST(Representational State Transfer)という概念は2000年Roy Thomas Fielding(彼はHTTP仕様の主な著者の一人です。)の博士論文の中で初めて登場しました。この中ではあるフレームワークの制約条件と原則について触れています。これらの制約条件と原則を満足したアプリケーションまたは設計はRESTfulということです。 RESTが何かを理解するためには、以下のようないくつかの概念を理解する必要があります: @@ -107,7 +107,7 @@ GoにはRESTに対する直接のサポートはありません。しかし、RE 上のコードではどのようにRESTなアプリケーションを書くかご覧いただきました。我々がアクセスするリソースはユーザです。異なるmethodによって異なる関数にアクセスしました。ここではサードパーティライブラリ`github.com/drone/routes`を使用しています。前の章でどのように自分で定義したルータを実現するかご紹介しました。このライブラリは自分で定義したルートと便利なルートのルールを反映させます。これを使って簡単にRESTのフレームワークを実装することができます。 ## まとめ -RESTはフレームワークスタイルの一種です。WWWの成功経験を汲み取っています:ステートレス、リソースを中心とし、HTTPプロトコルとURIプロトコルを十分利用しています。統一したインターフェース定義を提供し、Webサービスを設計する方法の一つとして流行しました。ある意味で、URIとHTTPといった黎明期のInternet標準を強調することで、RESTは大型のアプリケーションプログラムサーバ時代の前のWeb方式に回帰しています。現在GoはRESTに対するサポートはやはり簡単です。自分dね定義したルーティングを通して、異なるmethodに異なるhandleを実装することができます。このようにRESTのフレームワークは実現されています。 +RESTはフレームワークスタイルの一種です。WWWの成功経験を汲み取っています:ステートレス、リソースを中心とし、HTTPプロトコルとURIプロトコルを十分利用しています。統一したインターフェース定義を提供し、Webサービスを設計する方法の一つとして流行しました。ある意味でURIとHTTPといった黎明期のInternet標準を強調することで、RESTは大型のアプリケーションプログラムサーバ時代の前のWeb方式に回帰しています。今のところGoのRESTに対するサポートはまだシンプルです。自分で定義したルーティングを通して、異なるmethodに異なるhandleを実装することができます。このようにRESTのフレームワークは実現されています。 ## links * [目次]() diff --git a/ja/ebook/08.4.md b/ja/ebook/08.4.md index a23e44a9..2dd74c29 100644 --- a/ja/ebook/08.4.md +++ b/ja/ebook/08.4.md @@ -1,9 +1,9 @@ # 8.4 RPC -前の節でどのようにSocketとHTTPに基づいてネットワークアプリケーションを書くかご紹介しました。SocketとHTTPが採用しているのは"情報交換"パターン、すなわちクライアントがサーバに情報を一つ送信し、その後(一般的に)サーバが一定の情報を返すことでレスポンスとする、ようなものであると理解しました。双方は互いが発生させた情報を解析できるように、クライントとサーバ間が情報をやり取りする形式が締結されます。しかし独立した多くのアプリケーションは特にこのようなパターンを採用はしません。その代わり通常の関数をコールするのに似た方法で必要となる機能を完成させます。 +前の節でどのようにSocketとHTTPに基づいてネットワークアプリケーションを書くかご紹介しました。SocketとHTTPが採用しているのは"情報交換"パターン、すなわちクライアントがサーバに情報を一つ送信し、その後(一般的に)サーバが一定の情報を返すことでレスポンスとする、ようなものであると理解しました。双方は互いが発生させた情報を解析できるように、クライアントとサーバ間で情報をやり取りする形式が取り決められています。しかし多くの独立したアプリケーションは特にこのようなモデルを採用していません。その代わり通常の関数をコールするのに似た方法で必要となる機能を実現しています。 RPCは関数をコールするモデルをネットワーク化したものです。クライアントはローカルの関数をコールするのと同じように、引数をひっくるめてネットワークを通じてサーバに送信します。サーバでは処理の中でそれを展開し実行します。そして、実行結果をクライアントにフィードバックします。 -RPC(Remote Procedure Call Protocol) 、このリモートプロセスのコールプロトコルは、ネットワークを通してリモートコンピュータのプログラムにおいてリクエストするサービスです。低レイヤのネットワーク技術におけるプロトコルを理解する必要はありません。これは何らかの転送プロトコルの存在を仮定します。例えばTCPまたはUDPです。通信を行うプログラム間で情報データを簡単にやりとりすることができます。これを使って関数をコールするモデルをネットワーク化することができます。OSIネットワーク通信モデルで、RPCはデータリンク層とアプリケーション層を飛び越えます。RPCはネットワーク分散型の複数プログラムを含めてアプリケーションプログラムの開発を用意にします。 +RPC(Remote Procedure Call Protocol) 、このリモートプロセスのコールプロトコルは、ネットワークを通してリモートコンピュータのプログラムにおいてリクエストするサービスです。低レイヤのネットワーク技術におけるプロトコルを理解する必要はありません。これは何らかの転送プロトコルの存在を仮定します。例えばTCPまたはUDPです。通信を行うプログラム間で情報データを簡単にやりとりすることができます。これを使って関数をコールするモデルをネットワーク化することができます。OSIネットワーク通信モデルで、RPCはデータリンク層とアプリケーション層を飛び越えます。RPCはネットワーク分散型の複数プログラムを含めてアプリケーションプログラムの開発を容易にします。 ## RPCの動作原理 diff --git a/ja/ebook/09.2.md b/ja/ebook/09.2.md index 10f09127..617cc3ca 100644 --- a/ja/ebook/09.2.md +++ b/ja/ebook/09.2.md @@ -51,7 +51,6 @@ CleanMap["name"] = name } -上面代码中我们初始化了一个CleanMap的变量,当判断获取的name是`astaxie`、`herry`、`marry`三个中的一个之后 上のコードではCleamMapという変数をひとつ初期化しています。取得したnameが`astaxie`、`herry`、marry`の3つの打ちの一つだと判断した後、データをCleanMapに保存します。このようにCleanMap["name"]のなかのデータが合法であると保証することができます。そのためコードの他の部分にもこれを使用します。当然else部分に非合法なデータの処理を追加してもかまいません。再度フォームを表示しエラーを表示するといったこともできます。しかしフレンドリーに汚染されたデータを出力してはいけません。 上の方法はすでに知っている合法な値のデータをフィルタリングするのには有効ですが、すでに合法な文字列で構成されていると知っているデータをフィルタリングする場合はなんの助けにもなりません。例えば、ユーザ名をアルファベットと数字のみから構成させたいとする場合です: diff --git a/ja/ebook/09.4.md b/ja/ebook/09.4.md index 531dafb8..a6e24337 100644 --- a/ja/ebook/09.4.md +++ b/ja/ebook/09.4.md @@ -53,7 +53,7 @@ MSSQLサーバは後ろのシステムに新しいユーザを追加するコマ SQLインジェクション攻撃の被害はこれだけ大きく、どのように予防すればよいのでしょうか?以下のこれらの提案はひょっとしたらSQLインジェクションの予防に一定の助けとなるかもしれません。 -1. Webアプリケーションのデータベースの操作権限を厳格に制限する。このユーザにはその作業に必要となる最低限の権限だけを与え、最大限注入攻撃がデータベースに与える被害を減少させる。 +1. Webアプリケーションのデータベースの操作権限を厳格に制限する。このユーザにはその作業に必要となる最低限の権限だけを与え、できる限りSQLインジェクション攻撃がデータベースに与える被害を減少させる。 2. 入力されたデータが期待するデータ形式であるか検査し、変数の型を厳格に制限する。例えばregexpパッケージを使ってマッチング処理を行ったり、strconvパッケージを使って文字列を他の基本型のデータに変換することで判断する。 3. データベースに入ってくる特殊文字('"\角括弧&*;等)に対してエスケープ処理を行う。またはエンコードする。Goの`text/template`パッケージには`HTMLEscapeString`関数があり、文字列に対してエスケープ処理を行うことができます。 4. すべての検索クエリにはなるべくデータベースが提供するパラメータ化検索インターフェースを使用する。パラメータ化されたクエリはパラメータを使用し、ユーザが入力した変数をSQLクエリに埋め込みません。すなわち、直接SQLクエリを組み立てないということです。例えば`database/sql`の検索関数`Prepare`と`Query`を使ったり、`Exec(query string, args ...interface{})`を使います。 diff --git a/ja/ebook/09.5.md b/ja/ebook/09.5.md index 4e1c5019..457afd3d 100644 --- a/ja/ebook/09.5.md +++ b/ja/ebook/09.5.md @@ -86,4 +86,4 @@ Go言語のこの三種類の暗号化アルゴリズムの実装は以下の通 ## links * [目次]() * 前へ: [入力のフィルタリングを確実に行う](<09.4.md>) - * 次へ: [データを暗号化/復元する](<09.6.md>) + * 次へ: [データを暗号化/復号する](<09.6.md>) diff --git a/ja/ebook/09.6.md b/ja/ebook/09.6.md index 43a93b9d..1256598b 100644 --- a/ja/ebook/09.6.md +++ b/ja/ebook/09.6.md @@ -1,7 +1,7 @@ -# 9.6 データを暗号化/復元する +# 9.6 データを暗号化/復号する 前の節でどのようにしてパスワードを保存するかご紹介しました。しかしあるときには、慎重に扱うべきデータを暗号化して保存し、将来のあるときにいつでもそれらを復元したい場合があります。この時双方向暗号化アルゴリズムを使って我々の要求を満たさなければなりません。 -## base64で暗号化/復元する +## base64で暗号化/復号する もしWebアプリケーションが十分に簡単であれば、データのセキュリティにはそれほど厳格な要求があるわけではありません。ですので比較的簡単な暗号化である`base64`を採用することができます。このような方法は実装するのが比較的簡単で、Go言語の`base64`パッケージではすでにこれをよくサポートしています。下の例をご覧ください: package main @@ -38,9 +38,9 @@ } -## 高度な暗号化/復元 +## 高度な暗号化/復号 -Go言語の`crypto`では双方向暗号の高度な暗号化/復元パッケージがあります: +Go言語の`crypto`では双方向暗号の高度な暗号化/復号パッケージがあります: - `crypto/aes`パッケージ:AES(Advanced Encryption Standard)は、Rijndael暗号化アルゴリズムとも呼ばれます。アメリカの連邦政府が採用しているブロック暗号の標準の一つです。 - `crypto/des`パッケージ:DES(Data Encryption Standard)は双方向暗号化標準のひとつです。これは現在秘密鍵のシステムに最も広く使用されています。特に金融データのセキュリティの保護で使われています。かつてアメリカ連邦政府の暗号化のスタンダードでしたがすでにAESにとってかわられています。 @@ -59,14 +59,14 @@ Go言語の`crypto`では双方向暗号の高度な暗号化/復元パッケー var commonIV = []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f} func main() { - //暗号化したい文字列 + // 暗号化したい文字列 plaintext := []byte("My name is Astaxie") - //暗号化された文字列を渡すと、plaintは渡された文字列になります。 + // 暗号化された文字列を渡すと、plaintは渡された文字列になります。 if len(os.Args) > 1 { plaintext = []byte(os.Args[1]) } - //aesの暗号化文字列 + // aesの暗号化文字列 key_text := "astaxie12798akljzmknm.ahkjkljl;k" if len(os.Args) > 2 { key_text = os.Args[2] @@ -81,13 +81,13 @@ Go言語の`crypto`では双方向暗号の高度な暗号化/復元パッケー os.Exit(-1) } - //暗号化文字列 + // 暗号化文字列 cfb := cipher.NewCFBEncrypter(c, commonIV) ciphertext := make([]byte, len(plaintext)) cfb.XORKeyStream(ciphertext, plaintext) fmt.Printf("%s=>%x\n", plaintext, ciphertext) - // 復元文字列 + // 復号文字列 cfbdec := cipher.NewCFBDecrypter(c, commonIV) plaintextCopy := make([]byte, len(plaintext)) cfbdec.XORKeyStream(plaintextCopy, ciphertext) @@ -110,10 +110,10 @@ Go言語の`crypto`では双方向暗号の高度な暗号化/復元パッケー Decrypt(dst, src []byte) } -この3つの関数は暗号化/復元操作を実現します。詳細な操作は上の例をご覧ください。 +この3つの関数は暗号化/復号操作を実現します。詳細な操作は上の例をご覧ください。 ## まとめ -この節ではいくつかの暗号化/復元アルゴリズムをご紹介しました。Webアプリケーションを開発している時は要求に合わせて異なる方法によって暗号化/複合を行うことができます。一般的なアプリケーションではbase64アルゴリズムを採用することができます。より高度な場合はaesやdesアルゴリズムを採用することができます。 +この節ではいくつかの暗号化/復号アルゴリズムをご紹介しました。Webアプリケーションを開発している時は要求に合わせて異なる方法によって暗号化/復号を行うことができます。一般的なアプリケーションではbase64アルゴリズムを採用することができます。より高度な場合はaesやdesアルゴリズムを採用することができます。 ## links diff --git a/ja/ebook/11.1.md b/ja/ebook/11.1.md index 3ac48715..74caf227 100644 --- a/ja/ebook/11.1.md +++ b/ja/ebook/11.1.md @@ -1,5 +1,5 @@ # 11.1 エラー処理 -Go言語の主な設計は:簡潔、明瞭です。完結とは文法がCと似ていて、かなり簡単であるということです。明瞭とはいかなるキーワードも分かりやすいということを指しています。どのような隠された意味も含まず、エラー処理の設計でもこの思想は一貫しています。C言語では-1またはNULLをといった情報を返すことでエラーを表していることをご存知だと思います。しかしユーザからすると、対応するAPIの説明ドキュメントを見なければ、この戻り値がいったいどういう意味を表しているのかそもそもよくわかりません。例えば:0を返すと成功するのか失敗するのかといったことです。Goではerrorと呼ばれる型を定義することで、エラーを表しています。使用する際は、返されるerror変数とnilを比較することで操作が成功したか判断します。例えば`os.Open`関数はファイルのオープンに失敗した時にnilではないerror変数を返します。 +Go言語の主な設計方針は:簡潔、明瞭です。簡潔とは文法がCと似ていて、かなり簡単であるということです。明瞭とはいかなるキーワードも分かりやすいということを指しています。どのような隠された意味も含まず、エラー処理の設計でもこの思想は一貫しています。C言語では-1またはNULLをといった情報を返すことでエラーを表していることをご存知だと思います。しかしユーザからすると、対応するAPIの説明ドキュメントを見なければ、この戻り値がいったいどういう意味を表しているのかそもそもよくわかりません。例えば:0を返すと成功するのか失敗するのかといったことです。Goではerrorと呼ばれる型を定義することで、エラーを表しています。使用する際は、返されるerror変数とnilを比較することで操作が成功したか判断します。例えば`os.Open`関数はファイルのオープンに失敗した時にnilではないerror変数を返します。 func Open(name string) (file *File, err error) diff --git a/ja/ebook/preface.md b/ja/ebook/preface.md index 275b0665..6a7fad6c 100644 --- a/ja/ebook/preface.md +++ b/ja/ebook/preface.md @@ -60,7 +60,7 @@ - 9.3 [XSS攻撃の回避](09.3.md) - 9.4 [SQLインジェクションの回避](09.4.md) - 9.5 [パスワードの保存](09.5.md) - - 9.6 [データを暗号化/復元する](09.6.md) + - 9.6 [データを暗号化/復号する](09.6.md) - 9.7 [まとめ](09.7.md) * 10.[国際化とローカライズ](10.0.md) - 10.1 [デフォルトロケールの設定](10.1.md) From 0c9d31eb249b64fffe04395f274920215baaa346 Mon Sep 17 00:00:00 2001 From: Hirofumi Tamori Date: Sun, 31 Aug 2014 02:06:02 +0900 Subject: [PATCH 19/89] Translated the comments of the code into Japanese Translated the comments of the code into Japanese --- ja/ebook/07.3.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ja/ebook/07.3.md b/ja/ebook/07.3.md index b5a33e61..fd24113a 100644 --- a/ja/ebook/07.3.md +++ b/ja/ebook/07.3.md @@ -69,23 +69,23 @@ Matchパターンは文字列の判断に対してのみ使うことができ、 src := string(body) - //将HTML标签全转换成小写 + //HTMLタグを全て小文字に変換します re, _ := regexp.Compile("\\<[\\S\\s]+?\\>") src = re.ReplaceAllStringFunc(src, strings.ToLower) - //去除STYLE + //