サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
インタビュー
astaxie.gitbooks.io
3.3 GoはどのようにしてWeb作業を行うか 前の節でどのようにGoを通じてWebサービスを立てるかご紹介しました。net/httpパッケージを簡単に応用して便利に立てることができたかと思います。では、Goは低レイヤーで一体何を行なっているのでしょうか?万物は姿を変えてもその元は同じであります。GoのWebサービス作業も第一章でご紹介したWebの作業方法に関係しています。 webの作業方法のいくつかの概念 以下はどれもサーバの概念のいくつかです Request:ユーザが要求するデータ。ユーザのリクエスト情報を解析します。post、get、cookie、url等の情報を含みます。 Response:サーバがクライアントにデータをフィードバックする必要があります。 Conn:ユーザの毎回のリクエストリンクです。 Handler:リクエストを処理し、返すデータを生成する処理ロジック。 http
9.6 データを暗号化/復号する 前の節では安全なパスワードの保存の仕方を説明してきました。しかしあるときには、既にデータベースに保存されている、プライバシーに関わる暗号化されたデータを修正する必要があるかもしれません。データを復号することが必要な時は、既に述べた1方向ハッシュ関数の代わりに、対称鍵暗号アルゴリズムを使うべきです。 高度な暗号化/復号 Go言語のcryptoでは対称鍵暗号アルゴリズムをサポートしています。二種類の高度暗号化モジュールがあります。 crypto/aesパッケージ:AES(Advanced Encryption Standard)は、Rijndael暗号化アルゴリズムとも呼ばれます。アメリカの連邦政府が採用しているブロック暗号の標準です。 crypto/desパッケージ:DES(Data Encryption Standard)は対称鍵暗号の標準です。これは現在
11.2 GDBを使用してデバッグする プログラムを開発するにあたって開発者は度々デバッグコードを書く必要があります。Go言語は、PHPやPythonといった動的な言語のようにコンパイラを必要とせず修正を行うだけで直接出力し、動的に実行環境下でデータを出力できるわけではありません。当然Go言語もPrintlnのようにデータを出力することでデバッグすることはできますが、毎回再コンパイルする必要があります。これは非常に面倒くさいことです。Pythonではpdb/ipdbのようなツールによってデバッグを行うことができますし、Javascriptにも似たようなツールがあります。これらのツールはどれも動的に変数情報を表示させることや、ステップ実行ができます。我々はGDBを使ってデバッグすることができます。ではこの節ではどのようにしてGDBによってGoプログラムをデバッグするのかご紹介しましょう。 G
Go Web プログラミング Webプログラミングが好きでGo webプログラミングを書きました。皆さんに気にいってもらえれば幸いです。
8.1 Socketプログラミング 多くの低レイヤのネットワークアプリケーションの開発者の目には一切のプログラムがどれもSocketのように映ります。すこし大げさかもしれませんが、だいたいこのようなものです。現在のネットワークプログラミングはほぼすべてにおいてSocketを使用してプログラムされています。このような場面を考えたことはありませんか?毎日ブラウザを開いてページを閲覧する際、ブラウザプロセスはどのようにしてWebサーバと通信を行っているのでしょう?QQを使ってチャットする時、QQプロセスはどのようにしてサーバまたはあなたの友達がいるQQプロセスと通信を行なっているのでしょう?PPstreamを開いてストリーミング映像を見るとき、PPstreamプロセスはどのようにして動画サーバと通信を行っているのでしょう?このように、すべてはSocketに依存して通信を行なっています。ひとつを見
6.2 Goはどのようにしてsessionを使用するか 前の節で、sessionはサーバサイドで実装されるユーザとサーバ間の認証のソリューションのひとつであることをご紹介しました。現在Goの標準パッケージにはsessionのサポートがありません。この節では実際に手を動かしてgoバージョンのsession管理と作成を実現してみます。 sessionの作成過程 sessionの基本原理はサーバによって各セッションにおける情報データを保護することです。クライアントサイドはサーバサイドとグローバルでユニークなIDひとつを頼ってこのデータにアクセスし、インタラクティブな目的が達成されます。ユーザがWebアプリケーションにアクセスする際、サーバサイドのプログラムはsession作成の要求に従います。この過程は3つのステップに分けることができます: グローバルでユニークなIDの生成(sessionid)
4.5 ファイルのアップロード処理 ユーザによるファイルのアップロードを処理したいとします。例えば、現在Instagramのようなホームページを作成しているとします。ユーザが撮影した写真を保存する必要があります。このような要求はどのように実現するのでしょうか? フォームにファイルをアップロードさせるためには、まずformのenctype属性を追加する必要があります。enctype属性には以下の3つの種類があります: application/x-www-form-urlencoded 送信前にすべての文字列をエンコードする(デフォルト) multipart/form-data 文字列に対してエンコードしません。ファイルのアップロードウィジェットを含むフォームを使用するときはこの値が必要です。 text/plain 空白を"+"記号に置き換えます。ただし、特殊文字に対してエンコードは行われませ
1.Go environment configuration 1.1. Installation 1.2. $GOPATH and workspace 1.3. Go commands 1.4. Go development tools 1.5. Summary 2.Go basic knowledge 2.1. "Hello, Go" 2.2. Go foundation 2.3. Control statements and functions 2.4. struct 2.5. Object-oriented 2.6. interface 2.7. Concurrency 2.8. Summary 3.Web foundation 3.1. Web working principles 3.2. Build a simple web server 3.3. How Go works w
12.3 アプリケーションのデプロイ プログラムの開発が完了したら、Webアプリケーションをデプロイする必要があります。しかし、これらのプログラムはどのようにしてデプロイするのでしょうか?Goプログラムがコンパイルされた後は実行可能なファイルになりますので、Cプログラムを書いたことのある読者であればおそらくdaemonを採用することで完璧にプログラムをバックグラウンドで継続して実行できることを知っておられると思います。しかし、現在Goは完全にdaemonを実現することはできません。そのため、Goのアプリケーションプログラムをデプロイするにあたって、サードパーティのツールを使って管理することができます。サードパーティのツールにはいくつかあります。たとえば、Supervisord、upstart、daemontools等です。この節では現在自分のシステムにおいて採用しているツール、Superv
5.3 SQLiteデータベースの使用 SQLiteはオープンソースの組み込み式リレーショナルデータベースです。独立しており、設定なしでトランザクションのSQLデータベースエンジンをサポートします。非常にポータブルで簡単に利用でき、コンパクトで効率が高く、信頼性があります。他のデータベース管理システムとは異なり、SQLiteのインストールと実行は非常に簡単です。多くの場合は、ただSQLiteのバイナリファイルを用意するだけですぐに作成、接続、使用することができます。もしあなたが現在組み込み式データベースかソリューションをお探しであれば、SQLiteは絶対に考慮するに値します。SQLiteはいわばオープンソースのAccessのようなものです。 ドライバ Goがサポートするsqliteのドライバも比較的多いのですが、大部分はdatabase/sqlインターフェースをサポートしていません。 ht
1.4 Go開発ツール 本章ではいくつかの開発ツールをご紹介します。これらはすべて自動化を備えており、fmt機能を自動化します。なぜならこれらはすべてクロスプラットフォームであり、そのためインストール手順といったものはすべて同じものです。 LiteIDE LiteIDEはGo言語の開発に特化したクロスプラットフォームの軽量統合開発環境(IDE)です。visualfcで書かれています。 図1.4 LiteIDEのメイン画面 LiteIDEの主な特徴: 主なオペレーティングシステムのサポート Windows Linux MacOS X Goコンパイル環境の管理と切り替え 複数のGoコンパイル環境の管理と切り替え Go言語のクロスコンパイルのサポート Go標準と同じ項目管理方式 GOPATHに基づいたパッケージブラウザ GOPATHに基づいたコンパイルシステム GOPATHに基づいたドキュメント
1.2 GOPATHとワーキングディレクトリ さきほどGoをインストールする際はGOPATH変数を設定する必要があるとご説明しました。Goはバージョン1.1から必ずこの変数を設定するようになっており、Goのインストールディレクトリと同じにはできません。このディレクトリは、GoのソースコードやGoの実行可能ファイル、並びにコンパイル済みのパッケージファイルを保存する為に使用します。そのためこのディレクトリには3つのサブディレクトリが存在します:src、bin、pkgです。 GOPATH設定 go コマンドは、ある重要な環境変数に依存しています:$GOPATH1 Windowsシステムにおいて環境変数の形式は%GOPATH%です。この本の中では主にUnix形式を使用します。Windowsユーザは適時置き換えてください。 (注:これはGoのインストールディレクトリではありません。以下では筆者のワ
1 GOの環境設定 Goの世界へようこそ、さっそく初めてみましょう! Goは新しい言語です、並列処理、ガベージコレクションを備え、軽快にコンパイルできる言語です。以下のような特徴を持っています: 一台のコンピュータ上であっという間に大型のGoプログラムをコンパイルすることができます。 Goはソフトウェアの構造にモデルを与えます。分析をより簡単にこなすことができ、ファイルやライブラリのincludeといったCスタイルの書き出しにありがちな部分を大幅に省くことができます。 Goは静的型付け言語です。型に階層の概念が無いのでユーザはその関係に気をとられることもなく、典型的なオブジェクト指向言語よりももっとライトに感じるくらいです。 Goは完全なガベージコレクションタイプの言語です。また、基本的な並列処理とネットワークをサポートしています。 Goはマルチプロセッサ対応のソフトウェアを作成できるよう
7.4 テンプレートの処理 テンプレートとは何か おそらくあなたはMVCのデザインパターンについて聞いたことがあると思います。Modelはデータを処理を、Viewは表示結果を、Controllerはユーザのリクエストの制御を行います。Viewレイヤーの処理では、多くの動的な言語ではどれも静的なHTMLの中に動的言語が生成したデータを挿入します。例えばJSPでは<%=....=%>を挿入することで、PHPでは<?php.....?>を挿入することで実現します。 下の図でテンプレートのメカニズムについてご紹介します 図7.1 テンプレートのメカニズム図 Webアプリケーションがクライアントに返すフィードバックの情報の中の大部分の内容は静的で不変です。また少ない部分でユーザのリクエストによって動的に生成されるものがあります。例えばユーザのアクセスログリストを表示したい場合、ユーザ間ではログデータ
7.2 JSONの処理 JSON(Javascript Object Notation)は軽量なデータ記述言語です。文字を基礎とした言語のテキスト形式で、C言語ファミリーに似た習慣を採用しています。JSONとXMLの最も大きな違いはXMLが完全なマークアップ言語であるのに対し、JSONがそうでない点です。JSONはXMLに比べ小さく、早く簡単に解析でき、ブラウザのビルトインの素早い解析のサポートもあり、ネットワークのデータ転送分野により適しています。現在我々が見ることのできる多くのオープンプラットフォームでは基本的にJSONをデータ交換のインターフェースとして採用しています。JSONはWeb開発の中でもこのように重要でありますから、Go言語ではJSONのサポートはどうなっているのでしょうか?Go言語の標準ライブラリはすでに非常に良くJSONをサポートしています。JSONデータに対してとても
Build Web Application with Golang Purpose Because I'm interested in web application development, I used my free time to write this book as an open source version. It doesn't mean that I have a very good ability to build web applications; I would like to share what I've done with Go in building web applications. For those of you who are working with PHP/Python/Ruby, you will learn how to build a we
このページを最初にブックマークしてみませんか?
『astaxie (@astaxie) on GitBook · GitBook (Legacy)』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く