ウェブに行く


Golang 高性能プログラミング言語です.それは素晴らしい機能がありますが、Webパーツは神秘的かもしれないときに初心者です.

インストール
あなたが必要install Golang あなたのマシンでこのチュートリアルを読む前に.

始める
ゴランはかなり近いC , しかし、それは簡単に組み込みの機能や他のものを拡張するIHOのGOです.あなたはプロジェクトの広範な範囲のためにGOを使用することができます.

サーバ/クライアント
ゴランは、Webアプリケーションにも優れています.考えてください.何がWebアプリケーションを実行する必要がありますか?
クライアントとサーバーが必要です.ブラウザは優れたクライアントになります.
サーバーにリクエストを送信するブラウザでURLを入力します.サーバはリクエストを処理し、結果を返す.ブラウザが結果を表示します.

HTTPパッケージ
ゴー・アンHTTP package そのために.
アクションでそれを見るために、あなたの試みパスで新しいファイルを作成して、例えば、以下をペーストしてください.Main.go :
package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hi, folks!")
    })
    http.ListenAndServe(":777", nil)
}
次に端末を開き、次のように入力します.
go run Main.go
それからhttp://localhost:777 .HandleFunc() URLをマッピングするListenAndServe() HTTPサーバを起動します.
両方の機能が必要ResponseWriter , http.Request あるHandleFunc . 最初のものはブラウザ(“Writer”)でものを表示することを可能にします.第2のものは要求をつかんでいるのを許容します.
我々はfmt フォーマットされたI/Oを扱うパッケージです.

コードの改善
上記のコードは、適切ですが、エラーを処理しません.また、コードを分割するのもいいでしょう.
package main

import (
    "fmt"
    "log"
    "net/http"
)

func sayHello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi, folks!")
}

func main() {
    http.HandleFunc("/", sayHello)

    if err := http.ListenAndServe(":777", nil); err != nil {
        log.Fatal(err)
    }
}
ここではまだ私たちのhandlefuncを持っていますが、少し読みやすく、ログパッケージでエラーを記録します.

Goroutinesと並行性
GoroutineはGoランタイムによって管理される軽量スレッドです.
Source
それぞれのHTTP要求に対してGoはGoroutineと呼ぶものを実行します.自動的に同時実行を使用します.

グラブリクエスト
我々のおかげでHandleFunc , 簡単にパラメータやその他の情報を抽出することができます.

パラメータを取得する
Webアプリケーションで検索機能を実装したいとしましょう.これから始めることができます.
package main

import (
    "fmt"
    "log"
    "net/http"
)

func search(w http.ResponseWriter, r *http.Request) {
    s := r.URL.Query().Get("s")
    fmt.Fprintf(w, "You have searched '%v'.", s)
}

func main() {
    http.HandleFunc("/", search)

    if err := http.ListenAndServe(":777", nil); err != nil {
        log.Fatal(err)
    }
}
端末をオープンするgo run Main.go , そして、http://localhost:777/?s=chocolate
次のようになります.

You have searched 'chocolate.'


ここで検索入力でHTMLを追加します.次のセクションでHTMLテンプレートを含める方法を見ます.

POSTリクエストとテンプレート
HTMLを加えるためにテンプレートを作成することは可能です.例えば、signin.html .
そのフォームをページに表示する必要があります.それを達成するためにtemplate package :
{{define "signin"}}
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Sign in</title>
    </head>
    <body>
        <form action="/signin" method="post">

          <label for="email">Your email:</label>
          <input type="email" id="email" name="email" required> <br />

          <label for="passwd">Your password:</label>
          <input type="passwd" id="passwd" name="passwd" required><br />

          <input type="submit" value="Sign in">

        </form>
    </body>
</html>
{{end}}
そして、Goスクリプトでは、
package main

import (
    "log"
    "html/template"
    "net/http"
)

func signin(w http.ResponseWriter, r *http.Request) {

    t := template.New("Sign in")
    t = template.Must(t.ParseFiles("signin.html"))
    err := t.ExecuteTemplate(w, "signin", r)

    if err != nil {
        log.Fatalf("Template execution: %s", err)
    }
}

func main() {
    http.HandleFunc("/signin", signin)

    if err := http.ListenAndServe(":777", nil); err != nil {
        log.Fatal(err)
    }
}
しかし、我々はまた、ユーザーからの提出データをしたい.我々は、我々の習慣を使うことができますsignin HTTPメソッドがあるときにフォームを処理する関数POST :
package main

import (
    "log"
    "fmt"
    "html/template"
    "net/http"
)

func signin(w http.ResponseWriter, r *http.Request) {

    t := template.New("Sign in")
    t = template.Must(t.ParseFiles("signin.html"))
    err := t.ExecuteTemplate(w, "form", r)

    if err != nil {
        log.Fatalf("Template execution: %s", err)
    }

    if r.Method == "POST" {
        if err := r.ParseForm(); err != nil {
            log.Fatal(err)
        }
        fmt.Fprintf(w, "email is %v and password is %v", r.Form["email"], r.Form["passwd"])
    }

}

func main() {
    http.HandleFunc("/signin", signin)

    if err := http.ListenAndServe(":777", nil); err != nil {
        log.Fatal(err)
    }
}
ランgo run Main.go フォームに戻るhttp://localhost:777/signin 提出する.例えば、メールとパスワードの両方を表示します.

email is [[email protected]] and password is [cheater!alpha]



セキュリティ免責事項
私はそれが余分なクールな機能を持っているので、テンプレートパッケージが好きで、いくつかの重要なセキュリティポイントの世話をする.あなたも、前後にデータを渡すことができる、それは試してみて、それは優秀なパッケージです.
確かにここではすぐにどのようにすぐにゴランでWebものをレンダリングする方法を示すことです.あなたは実際の生活の中でそのようなパスワードを処理しないでください.同様に、それを使用する前に任意のデータをエスケープする必要があります、特にユーザーの入力を信頼し、特に検索機能を作成する.

包む
閉じるこの動画はお気に入りから削除されています.ゴランは非常に簡単であり、Cよりも簡単です構文は短く簡潔です.
HTTPパッケージは強力で効率的です.あなたは生産でそれを使用することができます.