golang 获取statuscode

最近日志打印的时候需要打印状态码,但是因为interface的原因直接获取失败,http.Request里面的response不知道怎么使用,所以就自己重写writeheader,write来截取status

type doneWriter struct {
    http.ResponseWriter
    done bool
}

func (w *doneWriter) WriteHeader(status int) {
    w.done = true
    w.ResponseWriter.WriteHeader(status)
}

func (w *doneWriter) Write(b []byte) (int, error) {
    w.done = true
    return w.ResponseWriter.Write(b)
}

func myMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        dw := &doneWriter{ResponseWriter: w}
        next.ServeHTTP(dw, r)
        if dw.done {
            // Something already wrote a response
            return
        }
        // Nothing else wrote a response
        w.WriteHeader(http.StatusOK)
        // Whatever you want here
    }
}

  

原文地址:https://www.cnblogs.com/zhangym/p/10118366.html

时间: 2024-11-06 07:11:04

golang 获取statuscode的相关文章

GoLang获取struct的tag

GoLang获取struct的tag内容:beego的ORM中也通过tag来定义参数的. 获取tag的内容是利用反射包来实现的.示例代码能清楚的看懂! 1 package main 2 import ( 3 "fmt" 4 "reflect" // 这里引入reflect模块 5 ) 6 type User struct { 7 Name string "user name" //这引号里面的就是tag 8 Passwd string "

golang 获取exe、dll、apk 版本号

// golang 实现读取exe dll apk 版本号 package main import (     "flag"     "fmt"     "log"     "os"     "path/filepath" ) import (     "github.com/lunny/axmlParser" ) var (     file fileInfo ) const (   

golang获取packed struct的大小

网络协议里面,很可能遇到自定义的封包,对应到c里面的是 typedef struct _PackageHeader { int headerLen; int timeStamp; short cmd }; 为了保证单字节对齐,可以加上编译选项 #pragma pack(1) 可惜的是,golang里面,没有这样的编译选项,猥琐的可参考的山寨代码如下 package main import ( "encoding/binary" "fmt" ) type TestSt

如何用golang获取linux上文件的创建/修改时间

在linux上想获取文件的元信息,我们需要使用系统调用lstat或者stat. 在golang的os包里已经把stat封装成了Stat函数,使用它比使用syscall要方便不少. 这是os.Stat的原型: func Stat(name string) (FileInfo, error) Stat returns a FileInfo describing the named file. If there is an error, it will be of type *PathError. 返

golang获取一串数字中与给定数最接近的数字

今天需要写一个算法,获取一串数字中与给定数最接近的数字,代码如下 package main import ( "fmt" ) func main(){ arr:=[]int{12,16,29,34,39,43,55,64,71,89,90,9} zuijin:=get_zuijin(40,arr) fmt.Println(zuijin) } func get_zuijin(this int,arr []int) int{ min:=0 if this==arr[0]{ return a

golang 获取指定目录下的子文件列表

获取指定目录下的子文件列表 package main import "fmt" import "io/ioutil" func main() { dir_list, e := ioutil.ReadDir("C:/Documents and Settings/xxx/Desktop/Copy of change-sub") if e != nil { fmt.Println("read dir error") return }

golang获取字符串长度需要注意的地方

中文长度,直接贴代码 package main import ( "fmt" "unicode/utf8" ) func main() { aa := "猪头" bb := "12345" fmt.Println(utf8.RuneCountInString(aa),len(aa)) fmt.Println(utf8.RuneCountInString(bb),len(bb)) }

golang获取数据表转换为json通用方法

package main import ( "database/sql" "fmt" "log" "net/http" "time" _ "github.com/go-sql-driver/mysql" ) import "strings" func main() { http.HandleFunc("/getuser", getuser) s :

golang 获取api 数据

直接上代码 type ApiRequest interface{} //参数 e 一个空接口,f http请求连接, p 请求方式 参数为 "POST" 或 "GET" func FromApiGetData(e *ApiRequest, f *PostUrl, p string) (string, error) { jsons, errs := json.Marshal(e) if errs != nil { fmt.Println(errs.Error()) }