美文网首页
go的错误码处理

go的错误码处理

作者: 学不会swoole不改名 | 来源:发表于2019-04-24 22:21 被阅读0次

目录结构: 都在src的目录下

vscode 编译器
··

主要是web.go 和http.go 的交互,fbn.go做了一个简单的斐波那契数列

先看web.go:


```

package main //入口

import (

    "exdefer/filelistenserver/fileting"

    "log"

    "net/http"

    "os"

)

type appHandler func(writer http.ResponseWriter, request *http.Request) error   //定义一个实现错误的方法

func errW(handler appHandler) func(writer http.ResponseWriter, request *http.Request) { //实现上面的方法

    return func(writer http.ResponseWriter, request *http.Request) {

        err := handler(writer, request) //http 的response 和request   设置一个错误的返回值

        if err != nil { // 判断一下

            log.Print("Print array ", err.Error(), "\n") //打印log

            code := http.StatusOK //code 默认设置成200

            switch { //switch选择

            case os.IsNotExist(err): //如果输入的这个文件不存在

                code = http.StatusNotFound //404

            case os.IsPermission(err): //如果权限不够

                code = http.StatusForbidden //403

            default: //否则的话

                code = http.StatusInternalServerError //500

            }

            http.Error(writer, http.StatusText(code), code) //输出 第一个参数 是response,第二个是 错误描述,返回的状态码 在swoole里面是$response->end("") /状态码是$response->status("");大同小异

        }

    }

}

func main() {

//第一个值是你要走的url目录 swoole里面通过document_root 进行设置

    http.HandleFunc("/list/", errW(fileting.Handlist)) //调用的http.go的包

    err := http.ListenAndServe(":8888", nil) //监听的端口 第二个值一般给nil

    if err != nil {

        panic(err)

    }

}

```


http.go

```

package fileting //声明包

import (

    "io/ioutil"

    "net/http"

    "os"

)

func Handlist(writer http.ResponseWriter, request *http.Request) error { //方法 返回一个error

    path := request.URL.Path[len("/list/"):] //切片 path访问为localhost:8888/list/xxx.txt 中的xxx.txt

    file, err := os.Open(path) //分开写了,两个返回值

    if err != nil {

        //http.Error(writer, err.Error(), http.StatusInternalServerError)

        return err //直接return err

    }

    defer file.Close() //defer 一下  open完要记得

    all, err := ioutil.ReadAll(file) //对文件的读取

    if err != nil {

        //panic(err)

        return err

    }

    writer.Write(all) //reponse 里面的write 类似swoole $response->end()

    return nil //如果没有错误返回nil

}

```

演示一下:


这是文件不存在 404
存在 200

今日的学习,结束

相关文章

  • go的错误码处理

    目录结构: 都在src的目录下 主要是web.go 和http.go 的交互,fbn.go做了一个简单的斐波那契数...

  • springboot之错误处理

    错误机制处理默认效果浏览器返回一个错误页面,包含错误码,错误信息其他客户端返回json数据,包含错误码,错误信息E...

  • 异常处理

    Go 的异常处理不同于其他语言使用的结构 对于 go 的异常处理, 使用 defer, panic, recove...

  • koa基础

    错误处理 koa 对于找不到的会自动返回404错误可以用ctx.throw(412) 跑出错误码 编写错误处理中间...

  • 蚂蚁区块链第17课 错误码指导大全

    1,摘要 本文介绍蚂蚁区块链的错误码按出错来源分为5类:平台校验错误码、虚拟机错误码、区块链错误码、客户端系统错误...

  • Go 语言基础——错误处理

    学习目标 掌握错误处理 掌握自定义错误处理 掌握defer关键字的使用 错误处理 GO没有异常处理机制 Go语言引...

  • spring 自定义 ExcePtion

    自定义定义一个异常处理类 继承RuntimeException 定义你得code错误码 spring aop特性拦...

  • 05使用 Go 定义错误码

    简介 设计错误码 代码实现 常见的错误码 总结 当前部分的代码 简介 不管在什么系统中, 定义错误码都是必不可少的...

  • python3下pywintypes.error的使用

    在python2.X中处理pywintypes.error异常,可以使用下标获取错误码,代码如下: 在python...

  • go语言strings库总结

    最近由于用go做字符串处理,用到了go的strings库,借此对go strings库做个总结,将go strin...

网友评论

      本文标题:go的错误码处理

      本文链接:https://www.haomeiwen.com/subject/euzngqtx.html