设置响应首部及响应体示例

返回体

func writeExample(w http.ResponseWriter, request *http.Request) {
    // 没有手动设置响应类型,会通过检测响应的前 512 个字节自动判断响应类型
    // 这里是 Content-Type: text/html; charset=utf-8
    str:= `<html>
    <head><title>Go Web Programming</title></head>
    <body><hl>Hello World</hl></body>
    </html>`
    w.Write([]byte(str))
}

设置状态码

func writeHeaderExample(w http.ResponseWriter, request *http.Request) {
    // 设置HTTP 状态码, WriteHeader 方法名有误导,只能设置状态码,而不是其他响应首部,
    // 默认是200
    // 调用 WriteHeader 之后不能在对响应首部做任何操作。但是可以继续写入响应体
    w.WriteHeader(500)
    // 在 WriteHeader 之后对首部的设置无效
    //w.Header().Set("Content-Type","json")
    fmt.Fprintln(w,"服务异常")
}

设置重定向

func headerExample(w http.ResponseWriter, request *http.Request) {
    // Header 设置响应首部
    w.Header().Set("Location","http://www.baidu.com")
    w.WriteHeader(302)
}

返回JSON

func jsonExample(w http.ResponseWriter, request *http.Request) {
    // Header 设置响应首部
    w.Header().Set("Content-Type","application/json")
    post := &Post{
        User:   "He Dong",
        Thread: []string{"First","Second","Three"},
    }
    json, _ := json.Marshal(post)
    w.Write(json)
}

完整代码

package main

import (
    json "encoding/json"
    "fmt"
    "net/http"
)

type Post struct {
    User string
    Thread []string
}

// 通过编写响应首部重定向
func main(){
   server := http.Server{
       Addr: "127.0.0.1:8080",
   }
   http.HandleFunc("/write",writeExample)
    http.HandleFunc("/writeHeader",writeHeaderExample)
    http.HandleFunc("/redirect",headerExample)
    http.HandleFunc("/jsonExample",jsonExample)
   server.ListenAndServe()
}



func writeExample(w http.ResponseWriter, request *http.Request) {
    // 没有手动设置响应类型,会通过检测响应的前 512 个字节自动判断响应类型
    // 这里是 Content-Type: text/html; charset=utf-8
    str:= `<html>
    <head><title>Go Web Programming</title></head>
    <body><hl>Hello World</hl></body>
    </html>`
    w.Write([]byte(str))
}

func writeHeaderExample(w http.ResponseWriter, request *http.Request) {
    // 设置HTTP 状态码, WriteHeader 方法名有误导,只能设置状态码,而不是其他响应首部,
    // 默认是200
    // 调用 WriteHeader 之后不能在对响应首部做任何操作。但是可以继续写入响应体
    w.WriteHeader(500)
    // 在 WriteHeader 之后对首部的设置无效
    //w.Header().Set("Content-Type","json")
    fmt.Fprintln(w,"服务异常")
}

func headerExample(w http.ResponseWriter, request *http.Request) {
    // Header 设置响应首部
    w.Header().Set("Location","http://www.baidu.com")
    w.WriteHeader(302)
}

// 返回json
func jsonExample(w http.ResponseWriter, request *http.Request) {
    // Header 设置响应首部
    w.Header().Set("Content-Type","application/json")
    post := &Post{
        User:   "He Dong",
        Thread: []string{"First","Second","Three"},
    }
    json, _ := json.Marshal(post)
    w.Write(json)
}