问题标签 [go-echo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - Golang从fly返回文件
我有 ECHO 框架,它应该根据请求返回文件,并且运行良好
但问题是,是否可以不创建物理文件 export.ini 并且之后不删除它?可以以某种方式即时返回内容吗?谢谢
gorilla - Echo Web 框架与现有 Gorilla Mux API 的集成
由于我们希望使用的 openapi 包(opai-codegen),我想转移到我的 API 的 echo 框架但是我们当前的 API 是通过 gorilla mux 构建的。由于当前代码库的大小,我们需要同时运行它们。
所以我想弄清楚如何让 gorilla mux 和 echo 框架通过相同的方式一起工作http.Server
gorilla mux API 是通过以下方式创建的:
然后我的 echo API 是通过以下方式创建的:
但是我不能让他们以同样的方式运行http.ListenAndServe
很想知道是否有任何东西可以让这两者一起工作?
谢谢
go - Golang+Echo:有没有一种好方法可以将 CRLF 转换为 LF 以用于 context.Bind 以防 multipart/form-data
我正在使用github.com/labstack/echo
framefork,当我从 FE 中检索数据时multipart/form-data
,字符串包含作为 CRLF 的换行符,但是在计算字符串长度时会出现问题,因为 CRLF 计为 2 个符号(使用utf8.RuneCountInString
),这会导致验证出现问题使用 ( github.com/go-playground/validator
)。我的前端也在计算 a 中的符号并对其进行验证,但是在 FE 字符串上有一个 LF 换行符,它会自动转换为 CRLF multipart/form-data
(按规范)
github.com/labstack/echo
有一种使用 [CustomBinder] (https://echo.labstack.com/guide/request/#custom-binder )的方法,但我不知道如何使用它来将 CRLF 转换为 LF,因为有很多处理程序和不同的数据结构。
处理程序示例:
自定义绑定器示例:
http - 运行 Go 服务器时,persistConn 会打开什么?
概述
我有一个运行 1.13 版的 Go echo http 服务器。
我正在监视有关服务器的许多不同统计信息,包括 goroutine 的数量。我会定期看到数千个 goroutine 的短暂峰值,而高负载不应导致它超过几百个。这些峰值与 labstack echo 中间件记录的 http 请求的增加无关。
为了更好地调试这种情况,我在程序中添加了一个定期检查,如果数量激增,它会向我发送关于 goroutine 的 pprof 报告。
添加的 goroutine 让我感到惊讶,因为当服务器处于“正常”操作模式时,我看到列出的函数有 0 个 goroutine。
然而,我正在努力解决的是这些来自哪里,它们表示什么,以及我希望它们在 http 请求中的什么时候出现。
在我未经训练的眼睛看来,好像有什么东西正在短暂地尝试打开一个连接,然后立即尝试关闭它。
但最好能确认这一点。在 http 请求的哪个部分执行readLoop
,writeLoop
和setRequestCancel
goroutines 开始?这些 goroutine 说明了什么?
笔记
我看过的几件事:
- 我尝试添加中间件来捕获来自 IP 地址的请求频率,并在峰值发生时报告这些请求频率。即使这个峰值正在发生,总请求数仍然很低,在 30-40 范围内。没有 IP 地址是异常的。
- 我考虑过执行诸如
lsof
查找开放连接之类的操作,但这似乎充其量只是一种脆弱的方法,并且依赖于我对这些 goroutine 含义的理解。 - 我试图将看到此内容的时间与网络上的其他内容进行交叉关联,但在不了解可能导致此问题的原因的情况下,我无法理解潜在的罪魁祸首可能在哪里。
- 如果 goroutine 的数量超过 8192,程序会崩溃并报错:
race: limit on 8192 simultaneously alive goroutines is exceeded, dying
. 搜索这个错误让我找到了这个 github 问题,这感觉很相关,因为事实上我在程序中使用了 gorilla websockets。但是,二进制文件是用我的错误编译的-race
,没有竞态条件被吐出,这与上述问题完全不同。
http - 如何使用流使用 Labstack Echo ReverseProxy ModifyResponse
Labstack Echo v4 最近更新为包含ModifyResponse钩子(ala golang 的 httputil ReverseProxy)。
大多数使用它的示例似乎都利用了 ioutil.ReadAll()。
例如:
我要做的是避免等待整个响应(来自 ReadAll)并监视流中的某些内容(即class='blue'
)然后用不同的文本替换它(即class='blue-green'
)
如何有效地使用流和尽可能少的分配来做到这一点?
unit-testing - 使用 Echo 路由器在 golang 中为 WS 创建单元测试
我使用 gorilla/websocket 作为 ws 和 labstack/echo 作为路由器。我需要为处理程序创建单元测试。我找到了使用默认 go 路由器解决此问题的主题,但我不明白如何将它与 echo 一起使用。我有这个:
websocket: the client is not using the websocket protocol: 'upgrade' token not found in 'Connection' header
此行中的错误:
我需要做什么才能将 ws 连接到回声处理程序?
go - 无法获取请求标头
我尝试使用回显框架打印请求标头,但回显框架似乎没有将标头加载到 context.request.Header 字段中。这是回声框架的错误吗?
这里是main函数,context.Request()是*http.Request的一个类型,
我用curlcurl -vvv "http://127.0.0.1:12312/"
测试服务器,但是服务器只打印
但实际上,卷曲提供以下作为标题信息
go - 如何在 golang/echo 中结合自定义 HTTP 错误处理程序触发 BasicAuth 提示?
考虑以下示例,该示例将基本身份验证中间件用于自定义组,并且还使用自定义 http 错误处理程序:
如果我省略e.HTTPErrorHandler = customHTTPErrorHandler
,那么基本身份验证中间件会在所有现代浏览器中触发提示。一旦我使用自定义错误处理程序,我总是会在没有提示的情况下遇到 401。
我知道
当基本身份验证中间件发现无效凭据时,它返回 401 - 未经授权的错误,中止当前的 HTTP 请求。
如文档https://echo.labstack.com/guide/error-handling中所述。
在这种情况下,如何让提示再次起作用?我应该编写一个自定义的基本身份验证中间件吗?我将如何在其中包含基本的身份验证提示?
我也尝试在顶部使用or ,
c.Request().BasicAuth()
但它也不会触发提示。c.Response().Header().Add(echo.HeaderWWWAuthenticate, `Basic realm="mydomain"`)
e.Use(func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error {}})
卷曲请求但是给了我预期的结果:
但是,如果我在浏览器中打开以下 url,http://test:test@localhost:1325/admin
我会在没有基本身份验证提示的情况下遇到相同的错误(401 Unauthorized)。
file - 我收到一个我不知道是什么原因的错误。运行程序时文件消失
我正在使用 Go 进行编码,并创建了一个文件处理程序和一个打印该文件值的程序。
但是,当我运行它时,应该使用 file.Filename 创建的文件被删除。
不知道是什么原因,即使我尝试调试,也没有答案,即使我google了它,我也没有得到答案。
(64 位 Windows 10 (WSL2))
go - 大摇大摆的一代正在忽略 SecurityDefiniton
无法理解一件事,为什么swag init
命令会生成所有内容,除了SecurityDefinition
块
例如,这是我在 main 函数上的代码:
以及我如何使用:
由此,它生成了一切,这条路径也是,但里面没有 SecurityDefinition 块。
我正在尝试实现这个: https ://github.com/swago/swag#security
PS 如果我将已经生成的文本放在生成的 doc 文件中,它就可以工作了……那为什么它不能生成呢?