Go: Http and Template

13658 ワード

1. http.ListenAndServer


ListenAndServerは、addrアドレスとしてTCPネットワーク上で傍受される.
そして、ハンドラーによってサービスが呼び出されて、着信接続の要求が処理される.
プロセッサは通常nilであり、この場合はDefaultServiceMuxを使用します.
package main

import (
	"fmt"
	"net/http"
)

const port string = ":4000"

func main() {
	fmt.Printf("Listening server : http://localhost%s\n", port)
	http.ListenAndServe(port, nil)
}

localhost:4000に接続すると、404 page not foundが表示され、正常に動作していることを示します.

2. http.HandleFunc


handleFuncは、DefaultServiceMuxに所定のモードのhandler関数を登録します.
ルートのキャラだと思っておけばいい
パラメータ受信モードとhandler、モードはルーティングするアドレスを記入するだけで、handler関数
func(rw http.ResponseWriter, r *http.Request)
この構成で記入して登録すればいいです.
package main

import (
	"fmt"
	"net/http"
)

const port string = ":4000"

func main() {
	fmt.Printf("Listening server : http://localhost%s\n", port)
	http.HandleFunc("/" ,func(rw http.ResponseWriter, r *http.Request) {
		fmt.Fprint(rw, "Hello World!")
	})
	http.ListenAndServe(port, nil)
}

「/」へのルーティング時にHelloWorldが表示される例.
HandleFuncに"/"モードを登録し、Fprintを使用してioをhttp応答に変換し、「hello world」文字列を出力します.

3. Template


templateパッケージを使用すると、htmlテンプレートを簡単にインポートし、SSRでレンダリングできます.

1.まずhtmlファイルを作成します。




vscodeで拡張します.gohtmlを使用してgotemplate-syntax拡張子を使用すると、後でデータを渡すときにハイライト表示されるので、事前にダウンロードできます.

2. ParseFiles


TemplateパッケージのParseFilesメソッドを使用して、ファイルをスライスしてインポートします.
ParseFilesメソッドは、テンプレートファイル名をパラメータ*templateとして受け入れます.Template、errorを返します
package main

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

const port string = ":4000"

func HandleHome(rw http.ResponseWriter, r *http.Request) {
	tmpl, err := template.ParseFiles("home.gohtml")
	if err != nil {
		panic(err)
	}
}

func main() {
	fmt.Printf("Listening server : http://localhost%s\n", port)
	http.HandleFunc("/" , HandleHome)
	http.ListenAndServe(port, nil)
}

3. Execute


Executeメソッドを使用して、パーティション化されたテンプレートがレンダリングされます.
パラメータはI/O変数とデータインタフェースを受信します.
package main

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

const port string = ":4000"

func HandleHome(rw http.ResponseWriter, r *http.Request) {
	tmpl, err := template.ParseFiles("home.gohtml")
	if err != nil {
		panic(err)
	}
	tmpl.Execute(rw, nil)
}

func main() {
	fmt.Printf("Listening server : http://localhost%s\n", port)
	http.HandleFunc("/" , HandleHome)
	http.ListenAndServe(port, nil)
}

レンダリングに成功しました.

4. Must


templateパッケージにはMustというユーティリティが用意されており、エラー処理の簡素化に役立ちます.
パラメータ(*template.template,err)を受信します.
エラーがある場合はエラー処理を行い、エラーがない場合は通常の*templateとなります.Template値を返します.
次のコードは、上記の例と100%一致する結果を示します.
package main

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

const port string = ":4000"

func HandleHome(rw http.ResponseWriter, r *http.Request) {
	tmpl := template.Must(template.ParseFiles("home.gohtml"))
	tmpl.Execute(rw, nil)
}

func main() {
	fmt.Printf("Listening server : http://localhost%s\n", port)
	http.HandleFunc("/" , HandleHome)
	http.ListenAndServe(port, nil)
}