Compare commits

...

3 commits

Author SHA1 Message Date
wjqserver
6b3f3335ab replace to iox 2025-07-18 17:40:01 +08:00
wjqserver
b06b4a227f update deps 2025-07-18 15:30:03 +08:00
wjqserver
ad167b6646 add Text 2025-07-18 15:26:43 +08:00
3 changed files with 26 additions and 11 deletions

View file

@ -23,7 +23,7 @@ import (
"github.com/fenthope/reco" "github.com/fenthope/reco"
"github.com/go-json-experiment/json" "github.com/go-json-experiment/json"
"github.com/WJQSERVER-STUDIO/go-utils/copyb" "github.com/WJQSERVER-STUDIO/go-utils/iox"
"github.com/WJQSERVER-STUDIO/httpc" "github.com/WJQSERVER-STUDIO/httpc"
) )
@ -271,6 +271,13 @@ func (c *Context) String(code int, format string, values ...interface{}) {
c.Writer.Write([]byte(fmt.Sprintf(format, values...))) c.Writer.Write([]byte(fmt.Sprintf(format, values...)))
} }
// Text 向响应写入无需格式化的string
func (c *Context) Text(code int, text string) {
c.Writer.Header().Set("Content-Type", "text/plain; charset=utf-8")
c.Writer.WriteHeader(code)
c.Writer.Write([]byte(text))
}
// JSON 向响应写入 JSON 数据 // JSON 向响应写入 JSON 数据
// 设置 Content-Type 为 application/json // 设置 Content-Type 为 application/json
func (c *Context) JSON(code int, obj interface{}) { func (c *Context) JSON(code int, obj interface{}) {
@ -424,7 +431,7 @@ func (c *Context) WriteStream(reader io.Reader) (written int64, err error) {
c.Writer.WriteHeader(http.StatusOK) // 默认 200 OK c.Writer.WriteHeader(http.StatusOK) // 默认 200 OK
} }
written, err = copyb.Copy(c.Writer, reader) // 从 reader 读取并写入 ResponseWriter written, err = iox.Copy(c.Writer, reader) // 从 reader 读取并写入 ResponseWriter
if err != nil { if err != nil {
c.AddError(fmt.Errorf("failed to write stream: %w", err)) c.AddError(fmt.Errorf("failed to write stream: %w", err))
} }
@ -464,7 +471,7 @@ func (c *Context) GetReqBodyFull() ([]byte, error) {
}() }()
} }
data, err := copyb.ReadAll(limitBytesReader) data, err := iox.ReadAll(limitBytesReader)
if err != nil { if err != nil {
c.AddError(fmt.Errorf("failed to read request body: %w", err)) c.AddError(fmt.Errorf("failed to read request body: %w", err))
return nil, fmt.Errorf("failed to read request body: %w", err) return nil, fmt.Errorf("failed to read request body: %w", err)
@ -498,7 +505,7 @@ func (c *Context) GetReqBodyBuffer() (*bytes.Buffer, error) {
}() }()
} }
data, err := copyb.ReadAll(limitBytesReader) data, err := iox.ReadAll(limitBytesReader)
if err != nil { if err != nil {
c.AddError(fmt.Errorf("failed to read request body: %w", err)) c.AddError(fmt.Errorf("failed to read request body: %w", err))
return nil, fmt.Errorf("failed to read request body: %w", err) return nil, fmt.Errorf("failed to read request body: %w", err)
@ -671,7 +678,7 @@ func (c *Context) SetBodyStream(reader io.Reader, contentSize int) {
// 将 reader 的内容直接复制到 ResponseWriter // 将 reader 的内容直接复制到 ResponseWriter
// ResponseWriter 实现了 io.Writer 接口 // ResponseWriter 实现了 io.Writer 接口
_, err := copyb.Copy(c.Writer, reader) _, err := iox.Copy(c.Writer, reader)
if err != nil { if err != nil {
c.AddError(fmt.Errorf("failed to write stream: %w", err)) c.AddError(fmt.Errorf("failed to write stream: %w", err))
// 注意:这里可能无法设置错误状态码,因为头部可能已经发送 // 注意:这里可能无法设置错误状态码,因为头部可能已经发送
@ -730,7 +737,7 @@ func (c *Context) SetRespBodyFile(code int, filePath string) {
c.Writer.WriteHeader(code) c.Writer.WriteHeader(code)
// 将文件内容写入响应体 // 将文件内容写入响应体
_, err = copyb.Copy(c.Writer, file) _, err = iox.Copy(c.Writer, file)
if err != nil { if err != nil {
c.AddError(fmt.Errorf("failed to write file %s to response: %w", cleanPath, err)) c.AddError(fmt.Errorf("failed to write file %s to response: %w", cleanPath, err))
// 注意:这里可能无法设置错误状态码,因为头部可能已经发送 // 注意:这里可能无法设置错误状态码,因为头部可能已经发送

10
go.mod
View file

@ -3,10 +3,14 @@ module github.com/infinite-iroha/touka
go 1.24.4 go 1.24.4
require ( require (
github.com/WJQSERVER-STUDIO/go-utils/copyb v0.0.6 github.com/WJQSERVER-STUDIO/go-utils/iox v0.0.2
github.com/WJQSERVER-STUDIO/httpc v0.8.0 github.com/WJQSERVER-STUDIO/httpc v0.8.1
github.com/fenthope/reco v0.0.3 github.com/fenthope/reco v0.0.3
github.com/go-json-experiment/json v0.0.0-20250714165856-be8212f5270d github.com/go-json-experiment/json v0.0.0-20250714165856-be8212f5270d
) )
require github.com/valyala/bytebufferpool v1.0.0 // indirect require (
github.com/WJQSERVER-STUDIO/go-utils/copyb v0.0.6 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
golang.org/x/net v0.42.0 // indirect
)

8
go.sum
View file

@ -1,10 +1,14 @@
github.com/WJQSERVER-STUDIO/go-utils/copyb v0.0.6 h1:/50VJYXd6jcu+p5BnEBDyiX0nAyGxas1W3DCnrYMxMY= github.com/WJQSERVER-STUDIO/go-utils/copyb v0.0.6 h1:/50VJYXd6jcu+p5BnEBDyiX0nAyGxas1W3DCnrYMxMY=
github.com/WJQSERVER-STUDIO/go-utils/copyb v0.0.6/go.mod h1:FZ6XE+4TKy4MOfX1xWKe6Rwsg0ucYFCdNh1KLvyKTfc= github.com/WJQSERVER-STUDIO/go-utils/copyb v0.0.6/go.mod h1:FZ6XE+4TKy4MOfX1xWKe6Rwsg0ucYFCdNh1KLvyKTfc=
github.com/WJQSERVER-STUDIO/httpc v0.8.0 h1:G7inJ5EEsg5+BkeFiNIo/6+Mj7Ygiq85yMT3Ld7frJY= github.com/WJQSERVER-STUDIO/go-utils/iox v0.0.2 h1:AiIHXP21LpK7pFfqUlUstgQEWzjbekZgxOuvVwiMfyM=
github.com/WJQSERVER-STUDIO/httpc v0.8.0/go.mod h1:50297rvgppmgPbZEtWzTWgkomoqPREkGy9T3Y/NqN7o= github.com/WJQSERVER-STUDIO/go-utils/iox v0.0.2/go.mod h1:mCLqYU32bTmEE6dpj37MKKiZgz70Jh/xyK9vVbq6pok=
github.com/WJQSERVER-STUDIO/httpc v0.8.1 h1:/eG8aYKL3WfQILIRbG+cbzQjPkNHEPTqfGUdQS5rtI4=
github.com/WJQSERVER-STUDIO/httpc v0.8.1/go.mod h1:mxXBf2hqbQGNHkVy/7wfU7Xi2s09MyZpbY2hyR+4uD4=
github.com/fenthope/reco v0.0.3 h1:RmnQ0D9a8PWtwOODawitTe4BztTnS9wYwrDbipISNq4= github.com/fenthope/reco v0.0.3 h1:RmnQ0D9a8PWtwOODawitTe4BztTnS9wYwrDbipISNq4=
github.com/fenthope/reco v0.0.3/go.mod h1:mDkGLHte5udWTIcjQTxrABRcf56SSdxBOCLgrRDwI/Y= github.com/fenthope/reco v0.0.3/go.mod h1:mDkGLHte5udWTIcjQTxrABRcf56SSdxBOCLgrRDwI/Y=
github.com/go-json-experiment/json v0.0.0-20250714165856-be8212f5270d h1:+d6m5Bjvv0/RJct1VcOw2P5bvBOGjENmxORJYnSYDow= github.com/go-json-experiment/json v0.0.0-20250714165856-be8212f5270d h1:+d6m5Bjvv0/RJct1VcOw2P5bvBOGjENmxORJYnSYDow=
github.com/go-json-experiment/json v0.0.0-20250714165856-be8212f5270d/go.mod h1:TiCD2a1pcmjd7YnhGH0f/zKNcCD06B029pHhzV23c2M= github.com/go-json-experiment/json v0.0.0-20250714165856-be8212f5270d/go.mod h1:TiCD2a1pcmjd7YnhGH0f/zKNcCD06B029pHhzV23c2M=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=