1. 程式人生 > 程式設計 >golang 設定web請求狀態碼操作

golang 設定web請求狀態碼操作

我就廢話不多說了,大家還是直接看程式碼吧~

package main
import (
 "net/http"
)
func main() {
 //路由處理繫結
 http.HandleFunc("/",Hander)
 //監聽8080埠
 http.ListenAndServe(":8080",nil)
}
func Hander(w http.ResponseWriter,req *http.Request) {
 //設定 http請求狀態
 w.WriteHeader(500)
 //寫入頁面資料
 w.Write([]byte("xiaochuan"))
}

你也可以用http 包裡面的常量 我這邊直接寫數字方便理解而已

const (
 StatusContinue   = 100
 StatusSwitchingProtocols = 101
 StatusOK     = 200
 StatusCreated    = 201
 StatusAccepted    = 202
 StatusNonAuthoritativeInfo = 203
 StatusNoContent   = 204
 StatusResetContent   = 205
 StatusPartialContent  = 206
 StatusMultipleChoices = 300
 StatusMovedPermanently = 301
 StatusFound    = 302
 StatusSeeOther   = 303
 StatusNotModified  = 304
 StatusUseProxy   = 305
 StatusTemporaryRedirect = 307
 StatusBadRequest     = 400
 StatusUnauthorized     = 401
 StatusPaymentRequired    = 402
 StatusForbidden     = 403
 StatusNotFound      = 404
 StatusMethodNotAllowed    = 405
 StatusNotAcceptable    = 406
 StatusProxyAuthRequired   = 407
 StatusRequestTimeout    = 408
 StatusConflict      = 409
 StatusGone       = 410
 StatusLengthRequired    = 411
 StatusPreconditionFailed   = 412
 StatusRequestEntityTooLarge  = 413
 StatusRequestURITooLong   = 414
 StatusUnsupportedMediaType   = 415
 StatusRequestedRangeNotSatisfiable = 416
 StatusExpectationFailed   = 417
 StatusTeapot      = 418
 StatusInternalServerError  = 500
 StatusNotImplemented   = 501
 StatusBadGateway    = 502
 StatusServiceUnavailable  = 503
 StatusGatewayTimeout   = 504
 StatusHTTPVersionNotSupported = 505
 // New HTTP status codes from RFC 6585. Not exported yet in Go 1.1.
 // See discussion at https://codereview.appspot.com/7678043/
 statusPreconditionRequired   = 428
 statusTooManyRequests    = 429
 statusRequestHeaderFieldsTooLarge = 431
 statusNetworkAuthenticationRequired = 511
)

下面修改一下就是這個樣子

package main
import (
 "net/http"
)
func main() {
 //路由處理繫結
 http.HandleFunc("/",req *http.Request) {
 //設定 http請求狀態 為500
 w.WriteHeader(http.StatusInternalServerError)
 //寫入頁面資料
 w.Write([]byte("xiaochuan"))
}

補充:go status.go 狀態碼定義

status.go使用了一個map集合定義了http的響應狀態碼

具體的參考如下

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package http
// HTTP status codes,defined in RFC 2616.
const (
 StatusContinue   = 100
 StatusSwitchingProtocols = 101
 StatusOK     = 200
 StatusCreated    = 201
 StatusAccepted    = 202
 StatusNonAuthoritativeInfo = 203
 StatusNoContent   = 204
 StatusResetContent   = 205
 StatusPartialContent  = 206
 StatusMultipleChoices = 300
 StatusMovedPermanently = 301
 StatusFound    = 302
 StatusSeeOther   = 303
 StatusNotModified  = 304
 StatusUseProxy   = 305
 StatusTemporaryRedirect = 307
 StatusBadRequest     = 400
 StatusUnauthorized     = 401
 StatusPaymentRequired    = 402
 StatusForbidden     = 403
 StatusNotFound      = 404
 StatusMethodNotAllowed    = 405
 StatusNotAcceptable    = 406
 StatusProxyAuthRequired   = 407
 StatusRequestTimeout    = 408
 StatusConflict      = 409
 StatusGone       = 410
 StatusLengthRequired    = 411
 StatusPreconditionFailed   = 412
 StatusRequestEntityTooLarge  = 413
 StatusRequestURITooLong   = 414
 StatusUnsupportedMediaType   = 415
 StatusRequestedRangeNotSatisfiable = 416
 StatusExpectationFailed   = 417
 StatusTeapot      = 418
 StatusPreconditionRequired   = 428
 StatusTooManyRequests    = 429
 StatusRequestHeaderFieldsTooLarge = 431
 StatusUnavailableForLegalReasons = 451
 StatusInternalServerError   = 500
 StatusNotImplemented    = 501
 StatusBadGateway     = 502
 StatusServiceUnavailable   = 503
 StatusGatewayTimeout    = 504
 StatusHTTPVersionNotSupported  = 505
 StatusNetworkAuthenticationRequired = 511
)
var statusText = map[int]string{
 StatusContinue:   "Continue",StatusSwitchingProtocols: "Switching Protocols",StatusOK:     "OK",StatusCreated:    "Created",StatusAccepted:    "Accepted",StatusNonAuthoritativeInfo: "Non-Authoritative Information",StatusNoContent:   "No Content",StatusResetContent:   "Reset Content",StatusPartialContent:  "Partial Content",StatusMultipleChoices: "Multiple Choices",StatusMovedPermanently: "Moved Permanently",StatusFound:    "Found",StatusSeeOther:   "See Other",StatusNotModified:  "Not Modified",StatusUseProxy:   "Use Proxy",StatusTemporaryRedirect: "Temporary Redirect",StatusBadRequest:     "Bad Request",StatusUnauthorized:     "Unauthorized",StatusPaymentRequired:    "Payment Required",StatusForbidden:     "Forbidden",StatusNotFound:      "Not Found",StatusMethodNotAllowed:    "Method Not Allowed",StatusNotAcceptable:    "Not Acceptable",StatusProxyAuthRequired:   "Proxy Authentication Required",StatusRequestTimeout:    "Request Timeout",StatusConflict:      "Conflict",StatusGone:       "Gone",StatusLengthRequired:    "Length Required",StatusPreconditionFailed:   "Precondition Failed",StatusRequestEntityTooLarge:  "Request Entity Too Large",StatusRequestURITooLong:   "Request URI Too Long",StatusUnsupportedMediaType:   "Unsupported Media Type",StatusRequestedRangeNotSatisfiable: "Requested Range Not Satisfiable",StatusExpectationFailed:   "Expectation Failed",StatusTeapot:      "I'm a teapot",StatusPreconditionRequired:   "Precondition Required",StatusTooManyRequests:    "Too Many Requests",StatusRequestHeaderFieldsTooLarge: "Request Header Fields Too Large",StatusUnavailableForLegalReasons: "Unavailable For Legal Reasons",StatusInternalServerError:   "Internal Server Error",StatusNotImplemented:    "Not Implemented",StatusBadGateway:     "Bad Gateway",StatusServiceUnavailable:   "Service Unavailable",StatusGatewayTimeout:    "Gateway Timeout",StatusHTTPVersionNotSupported:  "HTTP Version Not Supported",StatusNetworkAuthenticationRequired: "Network Authentication Required",}
// 返回httpcode對應的 狀態碼描述資訊
// 返回空字串表示狀態碼 unknown
func StatusText(code int) string {
 return statusText[code]
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。