go的语言错误处理 go语言报错

go的错误码处理目录结构: 都在srcgo的语言错误处理的目录下
主要是web.go 和http.go go的语言错误处理的交互 , fbn.go做go的语言错误处理了一个简单的斐波那契数列
先看web.gogo的语言错误处理:
```
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) //分开写go的语言错误处理了,两个返回值
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 {
【go的语言错误处理 go语言报错】//panic(err)
return err
}
writer.Write(all) //reponse 里面的write 类似swoole $response-end()
return nil //如果没有错误返回nil
}
```
演示一下:
今日的学习,结束
每天一个知识点:Go 语言的五种错误处理策略 当一个函数调用返回一个错误时go的语言错误处理 , 调用者应当负责检查错误并采取合适的处理应对 。根据情形,将有许多可能的处理场景 。接下来我们看 5 个策略go的语言错误处理:
Go 语言的错误处理有特定的规律 。进行错误检查之后,检测到失败的情况往往都在成功之前 。如果检测到的失败导致函数返回,成功的逻辑一般不会放在 else 块中而是在外层的作用域中 。函数会有一种通常的形式 , 就是在开头有一连串的检查来返回错误,之后跟着实际的函数体一直到最后 。
Go 语言的错误处理机制是一个优秀的设计吗只是Go里面的Error Check比较不直观而已,其实可以封装一层让它更好看的 。比如Rust的ResultT, E,它包含了一个Ok(..)和Err(..),Ok表示正确,然后带有正确的返回值 , 而Err则表示错误,然后带着错误信息 。这样处理起来就比较好看了 , 你可以选择忽略它 , 让程序直接在出错的地方挂掉,像这样someFunctionMayFail().unwrap(); // 要是出错了,就直接挂掉
或者在挂掉的时候,带一个自己的出错信息someFunctionMayFail().ok().expect("Expecting a xxxxx");
或者自己处理let return_val = match someFunctionMayFail() {
Ok(v) = v,
Err(err) = {
// Deal with the error
// for example:
// fail!("Fail!!!! {}", err);
}
};
当然,我不是说它和Go的那个Error Check有什么本质的区别,反正都是处理错误,但是我个人觉得Rust这样写更舒服 。
关于go的语言错误处理和go语言报错的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读