
正文
关于go语言运行404的信息
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
go的错误码处理
目录结构: 都在src的目录下
主要是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
}
```
演示一下:
今日的学习,结束
相关问答
Q1: GO语言(十三):使用 Go 和 Gin 开发 RESTful API(下)
当客户端在 发出POST请求时/albums,您希望将请求正文中描述的专辑添加到现有专辑数据中。
为此,您将编写以下内容:
1、编写代码
a.添加代码以将专辑数据添加到专辑列表。
在此代码中:
1)用于Context.BindJSON 将请求正文绑定到newAlbum。
2) album将从 JSON 初始化的结构附加到albums 切片。
3)向响应添加201状态代码,以及表示您添加的专辑的 JSON。
b.更改您的main函数,使其包含该router.POST函数,如下所示。
在此代码中:
1)将路径中的POST方法与 /albumspostAlbums函数相关联。
使用 Gin,您可以将处理程序与 HTTP 方法和路径组合相关联。这样,您可以根据客户端使用的方法将发送到单个路径的请求单独路由。
a.如果服务器从上一节开始仍在运行,请停止它。
b.从包含 main.go 的目录中的命令行,运行代码。
c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求。
该命令应显示添加专辑的标题和 JSON。
d.与上一节一样,使用curl检索完整的专辑列表,您可以使用它来确认添加了新专辑。
该命令应显示专辑列表。
当客户端向 发出请求时GET /albums/[id],您希望返回 ID 与id路径参数匹配的专辑。
为此,您将:
a.在您在上一节中添加的函数下方postAlbums,粘贴以下代码以检索特定专辑。
此getAlbumByID函数将提取请求路径中的 ID,然后找到匹配的专辑。
在此代码中:
(1)Context.Param用于从 URL 中检索id路径参数。当您将此处理程序映射到路径时,您将在路径中包含参数的占位符。
(2)循环album切片中的结构,寻找其ID 字段值与id参数值匹配的结构。如果找到,则将该album结构序列化为 JSON,并将其作为带有200 OK HTTP 代码的响应返回。
如上所述,实际使用中的服务可能会使用数据库查询来执行此查找。
(3)如果找不到专辑,则返回 HTTP 404错误。
b.最后,更改您的main,使其包含对router.GET的新调用,路径现在为/albums/:id ,如以下示例所示。
在此代码中:
(1)将/albums/:id路径与getAlbumByID功能相关联。在 Gin 中,路径中项目前面的冒号表示该项目是路径参数。
a.如果服务器从上一节开始仍在运行,请停止它。
b.在包含 main.go 的目录中的命令行中,运行代码以启动服务器。
c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求。
该命令应显示您使用其 ID 的专辑的 JSON。如果找不到专辑,您将收到带有错误消息的 JSON。
恭喜!您刚刚使用 Go 和 Gin 编写了一个简单的 RESTful Web 服务。
本节包含您使用本教程构建的应用程序的代码。
Q2: 用goagent时出现Error response Error code 502. Message: ['HTTP Error 404: Not Found'怎么办
可能与你安装的软件有冲突,不要安装电脑管家之类的国产软件,参考
关于go语言运行404和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






