Merge pull request #362 from HirofumiTamori/master
Corrected link [概要] updates and modified Japanese translation
This commit is contained in:
@@ -457,4 +457,4 @@ Javaに親しい読者はideaには不慣れだと思います、ideaはプラ
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [Goのコマンド](<01.3.md>)
|
||||
* 次へ: [概要](<01.5.md>)
|
||||
* 次へ: [まとめ](<01.5.md>)
|
||||
|
||||
@@ -15,5 +15,5 @@ GoはCに似たコンパイラ型言語です。ですが、このコンパイ
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第一章概要](<01.5.md>)
|
||||
* 前へ: [第一章まとめ](<01.5.md>)
|
||||
* 次へ: [こんにちは、Go](<02.1.md>)
|
||||
|
||||
@@ -236,4 +236,4 @@ runtimeパッケージにはgoroutineを処理するいくつかの関数が含
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [interface](<02.6.md>)
|
||||
* 次へ: [概要](<02.8.md>)
|
||||
* 次へ: [まとめ](<02.8.md>)
|
||||
|
||||
@@ -7,5 +7,5 @@ Webのプログラミングの基礎を勉強することはあなたにとっ
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第二章概要](<02.8.md>)
|
||||
* 前へ: [第二章まとめ](<02.8.md>)
|
||||
* 次へ: [webでの作業方法](<03.1.md>)
|
||||
|
||||
@@ -178,4 +178,4 @@ httpパッケージへの分析を通して、全体のコードの実行プロ
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [Goはどのようにしてweb作業を行うか](<03.3.md>)
|
||||
* 次へ: [概要](<03.5.md>)
|
||||
* 次へ: [まとめ](<03.5.md>)
|
||||
|
||||
@@ -21,5 +21,5 @@ HTTPプロトコルはステートレスなプロトコルです。ではどの
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第三章概要](<03.5.md>)
|
||||
* 前へ: [第三章まとめ](<03.5.md>)
|
||||
* 次へ: [フォームの入力を処理する](<04.1.md>)
|
||||
|
||||
@@ -152,4 +152,4 @@
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [フォームの多重送信の防止](<04.4.md>)
|
||||
* 次へ: [概要](<04.6.md>)
|
||||
* 次へ: [まとめ](<04.6.md>)
|
||||
|
||||
@@ -10,5 +10,5 @@ Goはどのようなデータベースの使用もbuiltinではサポートさ
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第四章概要](<04.6.md>)
|
||||
* 前へ: [第四章まとめ](<04.6.md>)
|
||||
* 次へ: [database/sqlインターフェース](<05.1.md>)
|
||||
|
||||
@@ -111,4 +111,4 @@ mgoの操作方法とbeedbの操作方法はほとんど似ていることがわ
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [beedbライブラリを使用してORM開発を行う](<05.5.md>)
|
||||
* 次へ: [概要](<05.7.md>)
|
||||
* 次へ: [まとめ](<05.7.md>)
|
||||
|
||||
@@ -8,5 +8,5 @@ Web開発ではどのようにしてユーザの閲覧過程のすべてをコ
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第五章概要](<05.7.md>)
|
||||
* 前へ: [第五章まとめ](<05.7.md>)
|
||||
* 次へ: [sessionとcookie](<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に送信します)。
|
||||
|
||||
|
||||
@@ -206,7 +206,7 @@ Webアプリケーションにはユーザのログアウト操作がありま
|
||||
|
||||
GCが十分にtimeパッケージのタイマー機能を利用していることがおわかりいただけるかと思います。時間が`maxLifeTime`を超えた後GC関数をコールした際、これによって`maxLiefTime`時間内でsessionが利用できることを保証できます。このような方法はまたオンラインユーザの数といった統計に用いることもできます。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
これまでに、WebアプリケーションにおけるグローバルなSession管理に用いられるSessionManagerを実装してまいりました。Sessionを提供するために用いられるストレージを定義し、Providerのインターフェースを実装しました。次の節では、インターフェースの定義を通してProviderを実装します。ぜひご参考ください。
|
||||
|
||||
## links
|
||||
|
||||
@@ -86,4 +86,4 @@ sessionが始まると、生成されたsessionIDの時間を記録する一つ
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [sessionストレージ](<06.3.md>)
|
||||
* 次へ: [概要](<06.5.md>)
|
||||
* 次へ: [まとめ](<06.5.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節のまとめでは文字列に関する操作についてご紹介します。
|
||||
|
||||
## 目次
|
||||

|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第六章概要](<06.5.md>)
|
||||
* 前へ: [第六章まとめ](<06.5.md>)
|
||||
* 次へ: [XMLの処理](<07.1.md>)
|
||||
|
||||
@@ -341,7 +341,7 @@ Webアプリケーションを作る時はテンプレートの一部が固定
|
||||
|
||||
>単一の集合のようなテンプレートは互いを知っています。もしあるテンプレートが複数の集合によって使用された場合、複数の集合の中で別々にパースされる必要があります。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
テンプレートに対する上記の詳細な紹介で、どのようにして動的なデータとテンプレートを融合させるかご理解いただけたかと思います:ループしたデータの出力、関数を定義、テンプレートのネスト等々。テンプレートの技術を応用することで、MVCパターンのVの処理を完成させることができます。以降の章ではどのようにMとCを処理するかご紹介します。
|
||||
|
||||
## links
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -149,4 +149,4 @@
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [ファイルの操作](<07.5.md>)
|
||||
* 次へ: [概要](<07.7.md>)
|
||||
* 次へ: [まとめ](<07.7.md>)
|
||||
|
||||
@@ -16,5 +16,5 @@ Go言語は21世紀のC言語です。性能と簡単さを追求するため、
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 次へ: [第七章概要](<07.7.md>)
|
||||
* 次へ: [第七章まとめ](<07.7.md>)
|
||||
* 前へ: [Socketプログラミング](<08.1.md>)
|
||||
|
||||
@@ -386,7 +386,7 @@ UDPサーバがどのように処理するか見てみましょう;
|
||||
}
|
||||
}
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
TCPとUDP Socketプログラミングの描写と実装を通して、GoはすでにSocketプログラミングを完全にサポートしていることがお分かりいただけたかと思います。使用に際してもとても便利です。Goはたくさんの関数を提供しています。これらの関数を使って簡単に高性能なSocketアプリケーションを書くことができます。
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -381,7 +381,7 @@ json-rpcはTCPプロトコルにもとづいて実装されていることがお
|
||||
|
||||
}
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
GoはすでにRPCに対して良いサポートを提供しています。上のHTTP、TCP、JSON RPCの実装を通して、多くの分散型のWebアプリケーションの開発を簡単に行うことができます。読者であるあなたはすでにここまでマスターしたものと思われます。ただ残念なことに現在GoはまだSOAP RPCのサポートを提供していません。幸い現在すでにサードパーティのオープンソースで実現されています。
|
||||
|
||||
|
||||
@@ -389,4 +389,4 @@ GoはすでにRPCに対して良いサポートを提供しています。上の
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [REST](<08.3.md>)
|
||||
* 次へ: [概要](<08.5.md>)
|
||||
* 次へ: [まとめ](<08.5.md>)
|
||||
|
||||
@@ -16,5 +16,5 @@ Webアプリケーションプログラムのセキュリティ問題の理由
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第八章概要](<08.5.md>)
|
||||
* 前へ: [第八章まとめ](<08.5.md>)
|
||||
* 次へ: [CSRF攻撃の予防](<09.1.md>)
|
||||
|
||||
@@ -84,7 +84,7 @@ tokenを検証
|
||||
|
||||
このように基本的には安全なPOSTを実現しました。しかしもしtokenのアルゴリズムが暴かれてしまったらと思われるかもしれません。しかし理論上は破られることは基本的に不可能です。ある人が計算したところ、この文字列を無理に破るにはだいたい2の11乗の時間が必要です。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
クロスサイトリクエストフォージェリ、すなわちCSRFは非常に危険なWebセキュリティ問題です。Webセキュリティ界隈では"眠れる巨人"と呼ばれています。リスクレベルはこの"肩書き"を見ればお分かりでしょう。この節ではクロスサイトリクエストフォージェリの紹介にとどまらず、このようなセキュリティホールを生み出す原因の所在についても詳しくご説明しました。これでもって攻撃への防御を促し、読者に安全なWebアプリケーションを書いていただけますよう望んでいます。
|
||||
|
||||
## links
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
CleanMap["username"] = username
|
||||
}
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
データのフィルタリングはWebセキュリティにおいて基礎となる作用です。多くのセキュリティ問題はデータのフィルタリングと検証を行わなかったことによるものです。例えば前の節のCSRF攻撃と以降に説明するXSS攻撃、SQLインジェクション等はどれも真面目にデータをフィルタリングしなかった事によって引き起こされます。そのため、この部分の内容は特に重視する必要があります。
|
||||
|
||||
## links
|
||||
|
||||
@@ -43,7 +43,7 @@ XSSに関するより詳しい分析は"[新浪微博XSS事件分析](http://www
|
||||
このようにすることでブラウザにhtmlを出力させずjavascriptコードを解釈させることができます。
|
||||
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
XSSセキュリティホールはとても危険なものです。Webアプリケーションを開発している時、必ずデータをフィルタリングするよう肝に銘じておいてください。特にクライアントに出力する前に。これは現在のところXSSを防止する手段として有効です。
|
||||
|
||||
## links
|
||||
|
||||
@@ -60,7 +60,7 @@ SQLインジェクション攻撃の被害はこれだけ大きく、どのよ
|
||||
5. アプリケーションをデプロイする前になるべく専門のSQLインジェクション検査ツールを使って検査を行い、発見されたSQLインジェクションセキュリティホールにはすぐにパッチをあてる。ネット上ではこの方面のオープンソースツールがたくさんあります。例えばsqlmap、SQLninja等です。
|
||||
6. ページがSQLのエラー情報を出力するのを避ける。例えば型のエラー、フィールドのミスマッチ等です。コードのSQLクエリが暴露されることで攻撃者がこれらのエラー情報を利用してSQLインジェクションを行うのを防ぎます。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
上の例によってSQLインジェクションは被害が相当大きいセキュリティホールであるとわかりました。そのため我々が通常書くWebアプリケーションに対してはどのような小さな事でも非常に重視する必要があります。小さな事が命運を分けます。生活も同じ、Webアプリケーションを書くことも同じです。
|
||||
|
||||
## links
|
||||
|
||||
@@ -77,7 +77,7 @@ Go言語のこの三種類の暗号化アルゴリズムの実装は以下の通
|
||||
|
||||
上の方法によってユニークな対応するパスワードの値を取得することができます。これは現在までもっともクラックが難しいものです。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
ここまででもしあなたに危機感が芽生えたのだとすれば、行動すべきです:
|
||||
|
||||
- 1)もし普通のユーザであれば、LastPassによってパスワードを保存/生成するのをおすすめします。異なるサイトで異なるパスワードを使用します。
|
||||
|
||||
@@ -112,11 +112,11 @@ Go言語の`crypto`では双方向暗号の高度な暗号化/復元パッケー
|
||||
|
||||
この3つの関数は暗号化/復元操作を実現します。詳細な操作は上の例をご覧ください。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
この節ではいくつかの暗号化/復元アルゴリズムをご紹介しました。Webアプリケーションを開発している時は要求に合わせて異なる方法によって暗号化/複合を行うことができます。一般的なアプリケーションではbase64アルゴリズムを採用することができます。より高度な場合はaesやdesアルゴリズムを採用することができます。
|
||||
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [パスワードの保存](<09.5.md>)
|
||||
* 次へ: [概要](<09.7.md>)
|
||||
* 次へ: [まとめ](<09.7.md>)
|
||||
|
||||
@@ -21,5 +21,5 @@
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第九章概要](<09.7.md>)
|
||||
* 前へ: [第九章まとめ](<09.7.md>)
|
||||
* 次へ: [デフォルトロケールの設定](<10.1.md>)
|
||||
|
||||
@@ -76,7 +76,7 @@ URLアドレスをもっとRESTfulな見た目にしたいと思うかもしれ
|
||||
|
||||
当然ユーザにあなたが提供するセレクトボックスや他の何らかの方法で対応するlocaleを設定させることもできます。ユーザの入力した情報を、このアカウントに関連するprofileに保存し、ユーザが再度ログインした時にこの設定をlocale設定にコピーします。これによってこのユーザの毎回のアクセスで自分が以前に設定したlocaleをもとにページを取得するよう保証することができます。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
上のご紹介から、Localeの設定にはいくつもの方法があるとわかりました。要求の違いによって異なるLocaleの設定方法を選択する必要があります。ユーザが最もよく知る方法で我々が提供するサービスを得る事で、アプリケーションのユーザビリティを高めます。
|
||||
|
||||
## links
|
||||
|
||||
@@ -125,7 +125,7 @@ Localeの違いによってビューを表示させる場合もあるかもし
|
||||
|
||||
このような方法を採用することでビューとリソースをローカライズすると、用意に拡張を行うことができます。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
この節ではどのようにしてローカライズリソースを使用し、保存するかご紹介しました。ある時は置換関数によって実装する必要があり、またある時はlangによって設定する必要があります。しかし最終的にはどれもkey-valueの方法によってLocaleに対応したデータを保存することになります。必要な時に対応するLocaleの情報を取り出して、もしそれがてkしうと情報であれば直接出力し、もし時間や日時または通過であった場合は`fmtPrintf`を使ったりその他のフォーマッタ関数によって処理する必要があります。異なるLocaleのビューとリソースに対しては最も簡単で、パスにlangを追加するだけで実装することができます。
|
||||
|
||||
## links
|
||||
|
||||
@@ -171,10 +171,10 @@
|
||||
|
||||
{{.V.Money | M}}
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
この節を通して多言語パッケージのWebアプリケーションをどのようにして実現するかわかりました。カスタム言語パッケージでは便利に多言語を実装することができます。また、設定ファイルによって非常に簡単に複数の言語を拡張することもできます。デフォルトではgo-i18nはパブリックな設定ファイルをロードします。例えば時間、通貨等です。非常に簡単に使用することができ、同時にテンプレートにおいてこれらの関数をサポートするため、対応するテンプレート関数も実装しました。このようにしてWebアプリケーションを開発する際直接テンプレートにおいてpipelineの方法で多言語パッケージを操作することができます。
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [ローカライズリソース](<10.2.md>)
|
||||
* 次へ: [概要](<10.4.md>)
|
||||
* 次へ: [まとめ](<10.4.md>)
|
||||
|
||||
@@ -15,5 +15,5 @@ Webアプリケーションを開発するにあたって、エラーは避け
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第十章概要](<10.4.md>)
|
||||
* 前へ: [第十章まとめ](<10.4.md>)
|
||||
* 次へ: [エラー処理](<11.1.md>)
|
||||
|
||||
@@ -191,7 +191,7 @@ Goはエラー処理においてCに似た戻り値を検査する方法を採
|
||||
|
||||
上で示したとおり、viewにアクセスした際異なる状況によって異なるエラーコードとエラー情報を取得することができます。これははじめのバージョンに比べてコード量にさほど変化はありませんが、これが表示するエラーはよりわかりやすくなっています。提示されるエラー情報のユーザビリティが高められ、拡張性もはじめのものに比べてよくなっています。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
プログラムの設計において障害の許容は重要な仕事の一部です。Goではエラー処理によってこれを実現します。errorはひとつのインターフェースに過ぎませんが、多くに変化させることができます。自分の需要に合わせて異なる処理を実装することができます。最後にご紹介したエラー処理の方法で、皆様によりよいWebエラーの処理の方法を設計するにあたってご助力になれば幸いです。
|
||||
|
||||
## links
|
||||
|
||||
@@ -240,7 +240,7 @@ GDBが実行している現在のプログラムの環境ではいくつかの
|
||||
|
||||
goroutinesのコマンドを確認することでgoroutineの内部がどのように実行されているのか詳しく理解することができます。各関数のコールされる順番はすでにはっきり表示されています。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
この章ではGDBデバッグにおけるGoプログラムの基本コマンドのいくつかをご紹介しました。`run`、`print`、`info`、`set variable`、`continue`、`list`、`break`といったよく使われるデバッグコマンドを含め、上のデモで行ったように、読者はすでにGoプログラムに対してGDBを使ったデバッグを基本的に理解したものと信じています。もしより多くのデバッグテクニックを知りたければオフィシャルのページのGDBデバッグの項目をご参照ください。
|
||||
|
||||
## links
|
||||
|
||||
@@ -139,11 +139,11 @@ Go言語はあらかじめ用意されている軽量なテストフレームワ
|
||||
|
||||
上の結果は我々がどのような`TestXXX`なユニットテスト関数も実行していないことを示しています。表示される結果は耐久テスト関数のみを実行しただけです。第一行には`Benchmark_Division`が500000000回実行され示し、毎回の実行が平均で7.76ミリ秒であったことを示しています。第二行は`Benchmark_TimeConsumingFunctin`が500000000回実行され、毎回の平均実行時間が7.80ミリ秒であったことを示しています。最後の1行は全体の実行時間を示しています。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
上のユニットテストと耐久テストの学習を通じて、`testing`パッケージが非常に軽量で、ユニットテストと耐久テストを書くのは非常に簡単であるとわかりました。ビルトインの`go test`コマンドを組み合わせることで、非常に便利にテストを行うことができます。このように我々が毎回コードを修正し終わる度に、go testを実行するだけで簡単に回帰テストを行うことができます。
|
||||
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [GDBを使用したデバッグ](<11.2.md>)
|
||||
* 次へ: [概要](<11.4.md>)
|
||||
* 次へ: [まとめ](<11.4.md>)
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第十一章概要](<11.4.md>)
|
||||
* 前へ: [第十一章まとめ](<11.4.md>)
|
||||
* 次へ: [アプリケーションログ](<12.1.md>)
|
||||
|
||||
@@ -157,7 +157,7 @@ seelogはカスタムなログ処理の定義をサポートしています。
|
||||
|
||||
このような方法によって簡単に対応する情報を探し出すことができます。これにはアプリケーションログに対して統計と分析を行えるという利点があります。また、ログのサイズを考慮する必要もあります。高トラフィックのWebアプリケーションにとって、ログの増加は恐るべきものです。そのため、seelogの設定ファイルでlogrotateを設定することで、ログファイルが絶え間なく増大し我々のディスクスペースが足りなくなるといった問題を引き起こさないよう保証することができます。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
上のseelogシステムとこれに基づいてどのようにログシステムを定義するかを学ぶことによって、非常に気軽に強力で適切な機能を持つログシステムを作成できることができました。ログシステムはデータ分析に信用できるデータソースを提供します。例えばログの分析を通して、システムをより一歩改善することができますし、アプリケーションに問題が発生した時に問題の位置を特定しやすくなります。また、seelogはログのレベル分け機能もサポートしています。minlevelの設定によって簡単にテストや配布版の出力情報のレベルを設定することができます。
|
||||
|
||||
## links
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
上ではエラーと例外の区別をご紹介しました。我々がプログラムを開発する時はどのように設計すべきでしょうか?ルールは非常に簡単です:もしあなたが定義した関数が失敗する可能性があるなら、エラーを返さなければなりません。他のpackageの関数をコールする時、もしこの関数の実装がとてもよい場合、panicの心配をする必要もありません。本当に例外を発生させなければならない状況ではないのに発生させてしまっているにしても、私がこれを処理するいわれはないはずです。panicとrecoverは自分が開発したpackageで実装されたロジックや、特殊な状況に対して設計されます。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
この節では我々のWebアプリケーションをデプロイした後どのようにして各種のエラーを処理するかについてまとめました:ネットワークエラー、データベースエラー、オペレーティングシステムのエラー等、エラーが発生した際、我々のプログラムはどのようにして正しく処理するのでしょうか:ユーザフレンドリーなエラーインターフェースを表示し、操作をロールバックし、ログを記録し、管理者に通知するといった操作を行います。最後にどのようにしてエラーと例外を正しく処理するかについてご紹介しました。一般的なプログラムにおいてはエラーと例外はよく混同されます。しかし、Goではエラーと例外は常に明確な区別がなされます。そのため、我々がプログラムを設計するにあたってエラーと例外を処理する際はどのような原則に従うべきかについてご紹介しました。
|
||||
## links
|
||||
* [目次](<preface.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アプリケーションプログラムを管理することができます。
|
||||
|
||||
|
||||
|
||||
@@ -165,10 +165,10 @@ redisのリストアはホットバックアップとコールドバックアッ
|
||||
|
||||
しかし時にはコールドバックアップによってデータをリストアする必要もあります。redisのコールドバックアップは実は保存されたデータベースファイルをredisのワーキングディレクトリにコピーするだけです。その後redisを起動すればOKです。redisは起動している間自動的にデータベースファイルをメモリにロードします。起動の速度はデータベースのファイルの大小によって決定します。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
この節ではアプリケーションのバックアップとリストアについてご紹介しました。ファイルのバックアップからデータベースのバックアップまで、どのように災害に対応するかです。また、rsyncを使った異なるシステムでのファイルの同期についてもご紹介しました。MySQLデータベースとredisデータベースのバックアップとリストアです。この節の紹介を通して開発された本番プロダクトの障害に対するひとつの参考になれば幸いです。
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [アプリケーションのデプロイ](<12.3.md>)
|
||||
* 次へ: [概要](<12.5.md>)
|
||||
* 次へ: [まとめ](<12.5.md>)
|
||||
|
||||
@@ -8,5 +8,5 @@
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第12章概要](<12.5.md>)
|
||||
* 前へ: [第12章まとめ](<12.5.md>)
|
||||
* 次へ: [プロジェクトのプラン](<13.1.md>)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
## フレームワーク設計
|
||||
ブログの迅速な作成を実現するため、上のプロセス設計に従って最小化されたフレームワークを開発します。フレームワークにはルーティング機能、RESTをサポートしたコントローラ、自動化とテンプレートの適用、ログシステム、設定管理等が含まれます。
|
||||
|
||||
## 概要
|
||||
## まとめ
|
||||
この節ではブログシステムにおいてGOPATHを設定するところからディレクトリの作成といった基礎情報までをご紹介しました。フレームワークの構造がMVCモードを採用することや、ブログシステムのデータフローの実行プロセスについても簡単にご紹介しました。最後にこれらのプロセスを通じてブログシステムのディレクトリ構造を設計しました。ここまでで、フレームワークの基本的な作成が完了しました。以降のいくつかの節ではひとつひとつ実装していきます。
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
|
||||
@@ -255,4 +255,4 @@ edit.tpl
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [ログとコンフィグ設計](<13.4.md>)
|
||||
* 次へ: [概要](<13.6.md>)
|
||||
* 次へ: [まとめ](<13.6.md>)
|
||||
|
||||
@@ -8,5 +8,5 @@
|
||||
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [第13章概要](<13.6.md>)
|
||||
* 前へ: [第13章まとめ](<13.6.md>)
|
||||
* 次へ: [静的なファイルのサポート](<14.1.md>)
|
||||
|
||||
@@ -102,4 +102,4 @@ goroutineをクリックすると詳細な情報を得ることができます
|
||||
## links
|
||||
* [目次](<preface.md>)
|
||||
* 前へ: [多言語サポート](<14.5.md>)
|
||||
* 次へ: [概要](<14.7.md>)
|
||||
* 次へ: [まとめ](<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
|
||||
* [目次](<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)
|
||||
|
||||
Reference in New Issue
Block a user