1. 程式人生 > >第一章--Go與web應用

第一章--Go與web應用

Go語言構建web應用的特性

  • 可擴充套件
  • 可維護
  • 模組化
  • 高效能

HTTP簡介

HTTP是一種無狀態、由文字構成的請求-響應(request-response)協議,這種協議使用的是客戶端-伺服器(client-server)計算模型

CGI

通用網管介面(Common Gateway Interface),允許web伺服器與一個獨立運行於web伺服器程序之外的程序對接

SSI

伺服器端包含(server-side includes),允許開發者在HTML檔案裡包含一些指令,衍生出了JSP(Java Server Pages),ASP(Active Server Pages)等Web模板引擎

http請求

  • 請求行(request-line)
  • 零個或任意多個請求首部(header)
  • 一個空行
  • 可選的報文主體(body)

請求方法

  • GET
  • POST
  • HEAD
  • PUT
  • DELETE
  • TRACE
  • OPTIONS
  • CONNECT
  • PATCH

http響應

  • 一個狀態行
  • 零個或任意數量的響應首部
  • 一個空行
  • 一個可選的報文主體

響應狀態碼

  • 1XX 情報狀態碼
  • 2XX 成功狀態碼
  • 3XX 重定向狀態碼
  • 4XX 客戶端錯誤狀態碼
  • 5XX 伺服器錯誤狀態碼

響應首部

  • Allow
  • Content-Length
  • Content-Type
  • Date
  • Location
  • Server
  • Set-Cookie
  • WWW-Authenticate

URI

統一資源識別符號(Uniform Resource Identifier),在Tim Berners-Lee在1994年發表的RFC 1630中定義了這個概念,還包括統一資源名稱(Uniform Resource Name)和統一資源定位符(Uniform Resource Location),URI是一個涵蓋性術語,包含了URN和URL,URI一般格式為:

<方案名稱>:<分層部分>[ ? <查詢引數>] [ # <片段>]

因每個URL都是一個單獨的字串,所以URL裡不能包含空格,?和#這些符號也不能做其它用途,我們需要用URL編碼(百分號編碼)對這些字元進行轉換,做法是將該字元在ASCII碼中的位元組值轉換為16進位制,並在前面加上%,例如空格就被轉換為%20。

處理器

Web應用中的處理器出了要接收和處理客戶端發來的請求,還需要呼叫模板引擎,然後由模板引擎生成HTML並把資料填充至將要回傳給客戶端的響應報文中

模板引擎(template engine)

  • 靜態模板
  • 動態模板

Hello Go

本地執行hello, world!

package main

import (
    "fmt"
    "net/http"
)

func handler(writer http.ResponseWriter, request *http.Request) {
    fmt.Fprintf(writer, "Hello World %s", request.URL.Path[1:])
}

func main()  {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}