Go by Example: HTTP Server

Xây dựng HTTP server tương đối dễ thông qua gói net/http trong Go.

package main
import (
    "fmt"
    "net/http"
)

Ý tưởng của net/http servers là dựa trên các hàm xử lý. Mỗi hàm xử lý được xây dựng dựa trên cấu trúc của http.Handler. Cách đơn giản nhất để tạo một hàm xử lý là sử dụng hàm http.HandlerFunc như ví dụ dưới đây:

func hello(w http.ResponseWriter, req *http.Request) {

Hàm xử lý sẽ nhận 2 tham số là http.ResponseWriterhttp.Request. http.ResponseWriter sẽ được dùng để trả về HTTP response. Ví dụ đơn giản này chỉ trả về “hello\n”.

    fmt.Fprintf(w, "hello\n")
}
func headers(w http.ResponseWriter, req *http.Request) {

Hàm xử lý này sẽ đọc tất cả các header của HTTP request và trả về giá trị chúng qua HTTP response.

    for name, headers := range req.Header {
        for _, h := range headers {
            fmt.Fprintf(w, "%v: %v\n", name, h)
        }
    }
}
func main() {

Chúng ta chỉ định hàm xử lý thông qua hàm http.HandleFunc. Hàm này sẽ nhận 2 tham số là đường dẫn và hàm xử lý Vd: /hello sẽ được xử lý bởi hàm hello và /headers sẽ được xử lý bởi hàm headers

    http.HandleFunc("/hello", hello)
    http.HandleFunc("/headers", headers)

Bước cuối cùng là dùng ListenAndServe để lắng nghe các request đến port 8090 và xử lý chúng thông qua các hàm xử lý đã định nghĩa

    http.ListenAndServe(":8090", nil)
}

Run the server in the background.

$ go run http-servers.go &

Access the /hello route.

$ curl localhost:8090/hello
hello

Ví dụ tiếp theo: Context.