context

package
v0.25.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 25, 2019 License: MIT Imports: 25 Imported by: 0

Documentation

Overview

Package context 用于处理单个请求的上下文关系。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Exit

func Exit(status int)

Exit 以指定的状态码退出当前协程

status 表示输出的状态码,如果为 0,则不会作任何状态码输出。

Exit 最终是以 panic 的形式退出,所以如果你的代码里截获了 panic, 那么 Exit 并不能达到退出当前请求的操作。

与 Error 的不同在于: Error 不会主动退出当前协程,而 Exit 则会触发 panic,退出当前协程。

Types

type Context

type Context struct {
	App *app.App

	Response http.ResponseWriter
	Request  *http.Request

	// 指定输出时所使用的媒体类型,以及名称
	OutputMimeType     mimetype.MarshalFunc
	OutputMimeTypeName string

	// 输出到客户端的字符集
	//
	// 若值为 encoding.Nop 或是空,表示为 utf-8
	OutputCharset     encoding.Encoding
	OutputCharsetName string

	// 客户端内容所使用的媒体类型。
	InputMimeType mimetype.UnmarshalFunc

	// 客户端内容所使用的字符集
	//
	// 若值为 encoding.Nop 或是空,表示为 utf-8
	InputCharset encoding.Encoding

	// 输出语言的相关设置项。
	OutputTag     language.Tag
	LocalePrinter *message.Printer
	// contains filtered or unexported fields
}

Context 是对当前请求内容的封装,仅与当前请求相关。

func New

func New(w http.ResponseWriter, r *http.Request, a *app.App) *Context

New 根据当前请求内容生成 Context 对象

如果 Accept 的内容与当前配置无法匹配, 则退出(panic)并输出 NotAcceptable 状态码。

NOTE: New 仅供框架内部使用,不保证兼容性。如果框架提供的 Context 不符合你的要求,那么请直接使用 &Context{} 指定相关的值构建对象。

func (*Context) Body

func (ctx *Context) Body() (body []byte, err error)

Body 获取用户提交的内容。

相对于 ctx.Request.Body,此函数可多次读取。 不存在 body 时,返回 nil

func (*Context) ClientIP

func (ctx *Context) ClientIP() string

ClientIP 返回客户端的 IP 地址。

获取顺序如下:

  • X-Forwarded-For 的第一个元素
  • Remote-Addr 报头
  • X-Read-IP 报头

func (*Context) Critical

func (ctx *Context) Critical(status int, v ...interface{})

Critical 输出一条日志到 CRITICAL 日志通道,并向用户输出一个指定状态码的页面。

若是输出日志的过程中出错,则 panic 若没有错误信息,则仅向客户端输出一条状态码信息。

func (*Context) Criticalf

func (ctx *Context) Criticalf(status int, format string, v ...interface{})

Criticalf 输出一条日志到 CRITICAL 日志通道,并向用户输出一个指定状态码的页面。

若是输出日志的过程中出错,则 panic 若没有错误信息,则仅向客户端输出一条状态码信息。

func (*Context) Error

func (ctx *Context) Error(status int, v ...interface{})

Error 输出一条日志到 ERROR 日志通道,并向用户输出一个指定状态码的页面。

若是输出日志的过程中出错,则 panic 若没有错误信息,则仅向客户端输出一条状态码信息。

func (*Context) Errorf

func (ctx *Context) Errorf(status int, format string, v ...interface{})

Errorf 输出一条日志到 ERROR 日志通道,并向用户输出一个指定状态码的页面。

若是输出日志的过程中出错,则 panic 若没有错误信息,则仅向客户端输出一条状态码信息。

func (*Context) Exit

func (ctx *Context) Exit(status int)

Exit 以指定的状态码退出当前协程

func (*Context) Fprint added in v0.18.0

func (ctx *Context) Fprint(w io.Writer, v ...interface{}) (int, error)

Fprint 相当于 ctx.LocalePrinter.Fprint

func (*Context) Fprintf added in v0.18.0

func (ctx *Context) Fprintf(w io.Writer, key message.Reference, v ...interface{}) (int, error)

Fprintf 相当于 ctx.LocalePrinter.Fprintf

func (*Context) Fprintln added in v0.18.0

func (ctx *Context) Fprintln(w io.Writer, v ...interface{}) (int, error)

Fprintln 相当于 ctx.LocalePrinter.Fprintln

func (*Context) Marshal

func (ctx *Context) Marshal(status int, v interface{}, headers map[string]string) error

Marshal 将 v 解码并发送给客户端。

若 v 是一个 nil 值,则不会向客户端输出任何内容; 若是需要正常输出一个 nil 类型到客户端(JSON 中会输出 null), 可以使用 mimetype.Nil 变量代替。

NOTE: 如果需要指定一个特定的 Content-Type 和 Content-Language, 可以在 headers 中指定,否则使用当前的编码和语言名称。

func (*Context) NewResult added in v0.21.0

func (ctx *Context) NewResult(code int) *Result

NewResult 返回 Result 实例

func (*Context) ParamID

func (ctx *Context) ParamID(key string) (int64, error)

ParamID 获取地址参数中表示 ID 的值。相对于 ParamInt64,该值必须大于 0。

NOTE: 若需要获取多个参数,可以使用 Context.Params 获取会更方便。

func (*Context) ParamInt64

func (ctx *Context) ParamInt64(key string) (int64, error)

ParamInt64 取地址参数中的 int64 值。

NOTE: 若需要获取多个参数,可以使用 Context.Params 获取会更方便。

func (*Context) ParamString

func (ctx *Context) ParamString(key string) (string, error)

ParamString 取地址参数中的 string 值。

NOTE: 若需要获取多个参数,可以使用 Context.Params 获取会更方便。

func (*Context) Params

func (ctx *Context) Params() *Params

Params 声明一个新的 Params 实例

func (*Context) Print added in v0.18.0

func (ctx *Context) Print(v ...interface{}) (int, error)

Print 相当于 ctx.LocalePrinter.Print

func (*Context) Printf added in v0.18.0

func (ctx *Context) Printf(key message.Reference, v ...interface{}) (int, error)

Printf 相当于 ctx.LocalePrinter.Printf

func (*Context) Println added in v0.18.0

func (ctx *Context) Println(v ...interface{}) (int, error)

Println 相当于 ctx.LocalePrinter.Println

func (*Context) Queries

func (ctx *Context) Queries() *Queries

Queries 声明一个新的 Queries 实例

func (*Context) QueryObject

func (ctx *Context) QueryObject(v interface{}) (errors map[string]string)

QueryObject 将查询参数解析到一个对象中。

返回的是每一个字段对应的错误信息。

具体的文档信息可以参考 https://github.com/issue9/query

func (*Context) Read

func (ctx *Context) Read(v interface{}) (ok bool)

Read 从客户端读取数据并转换成 v 对象。

功能与 Unmarshal() 相同,只不过 Read() 在出错时, 会直接调用 Error() 处理:输出 422 的状态码, 并返回一个 false,告知用户转换失败。

func (*Context) Render

func (ctx *Context) Render(status int, v interface{}, headers map[string]string)

Render 将 v 渲染给客户端。

功能与 Marshal() 相同,只不过 Render() 在出错时, 会直接调用 Error() 处理,输出 500 的状态码。

如果需要具体控制出错后的处理方式,可以使用 Marshal 函数。

func (*Context) ServeContent added in v0.21.0

func (ctx *Context) ServeContent(buf io.ReadSeeker, name string, headers map[string]string)

ServeContent 将一块内存中的内容转换为文件提供下载

文件可能提供连续的下载功能,其状态码是未定的, 所以提供了一个类似于 Render 的变体专门用于下载功能。

buf 实现 io.ReadSeeker 接口的内存块; name 下载时,显示的文件; headers 文件报头内容。

func (*Context) ServeFile added in v0.21.0

func (ctx *Context) ServeFile(path, name string, headers map[string]string)

ServeFile 提供文件下载

文件可能提供连续的下载功能,其状态码是未定的, 所以提供了一个类似于 Render 的变体专门用于下载功能。

path 指向本地文件的地址; name 下载时,显示的文件,若为空,则直接使用 path 中的文件名部分; headers 额外显示的报头内容。

func (*Context) Sprint added in v0.18.0

func (ctx *Context) Sprint(v ...interface{}) string

Sprint 相当于 ctx.LocalePrinter.Sprint

func (*Context) Sprintf added in v0.18.0

func (ctx *Context) Sprintf(key message.Reference, v ...interface{}) string

Sprintf 相当于 ctx.LocalePrinter.Sprintf

func (*Context) Sprintln added in v0.18.0

func (ctx *Context) Sprintln(v ...interface{}) string

Sprintln 相当于 ctx.LocalePrinter.Sprintln

func (*Context) Unmarshal

func (ctx *Context) Unmarshal(v interface{}) error

Unmarshal 将提交的内容转换成 v 对象。

func (*Context) Upload added in v0.21.0

func (ctx *Context) Upload(field string, u *upload.Upload) ([]string, error)

Upload 执行上传文件的相关操作。

返回的是文件列表

type Params

type Params struct {
	// contains filtered or unexported fields
}

Params 用于处理路径中包含的参数。

p := ctx.Params()
aid := p.Int64("aid")
bid := p.Int64("bid")
if p.HasErrors() {
    // do something
    return
}

func (*Params) Bool

func (p *Params) Bool(key string) bool

Bool 获取参数 key 所代表的值,并转换成 bool。

最终会调用 strconv.ParseBool 进行转换, 也只有该方法中允许的字符串会被正确转换。

func (*Params) Errors

func (p *Params) Errors() map[string]string

Errors 返回所有的错误信息

func (*Params) Float64

func (p *Params) Float64(key string) float64

Float64 获取参数 key 所代表的值,并转换成 float64。

func (*Params) HasErrors

func (p *Params) HasErrors() bool

HasErrors 是否有错误内容存在

func (*Params) ID

func (p *Params) ID(key string) int64

ID 获取参数 key 所代表的值,并转换成 int 且值必须大于 0。

func (*Params) Int

func (p *Params) Int(key string) int

Int 获取参数 key 所代表的值,并转换成 int。

func (*Params) Int64

func (p *Params) Int64(key string) int64

Int64 获取参数 key 所代表的值,并转换成 int64。

func (*Params) MustBool

func (p *Params) MustBool(key string, def bool) bool

MustBool 获取参数 key 所代表的值,并转换成 bool。 若不存在或是转换出错,则返回 def 作为其默认值。 仅在类型转换出错时,才会向 errors 写入错误信息。

最终会调用 strconv.ParseBool 进行转换, 也只有该方法中允许的字符串会被正确转换。

func (*Params) MustFloat64

func (p *Params) MustFloat64(key string, def float64) float64

MustFloat64 获取参数 key 所代表的值,并转换成 float64。 若不存在或是转换出错,则返回 def 作为其默认值。 仅在类型转换出错时,才会向 errors 写入错误信息。

func (*Params) MustID

func (p *Params) MustID(key string, def int64) int64

MustID 获取参数 key 所代表的值,转换成 int64 且必须大于 0。 若不存在或是转换出错,则返回 def 作为其默认值。 仅在类型转换出错或是小于零时,才会向 errors 写入错误信息。

func (*Params) MustInt

func (p *Params) MustInt(key string, def int) int

MustInt 获取参数 key 所代表的值,并转换成 int。 若不存在或是转换出错,则返回 def 作为其默认值。 仅在类型转换出错时,才会向 errors 写入错误信息。

func (*Params) MustInt64

func (p *Params) MustInt64(key string, def int64) int64

MustInt64 获取参数 key 所代表的值,并转换成 int64。 若不存在或是转换出错,则返回 def 作为其默认值。 仅在类型转换出错时,才会向 errors 写入错误信息。

func (*Params) MustString

func (p *Params) MustString(key, def string) string

MustString 获取参数 key 所代表的值,并转换成 string。 若不存在或是转换出错,则返回 def 作为其默认值。

func (*Params) Result added in v0.21.0

func (p *Params) Result(code int) *Result

Result 转换成 Result 对象

code 是作为 Result.Code 从错误消息中查找,如果不存在,则 panic。 Params.errors 将会作为 Result.Detail 的内容。

func (*Params) String

func (p *Params) String(key string) string

String 获取参数 key 所代表的值,并转换成 string。

type Queries

type Queries struct {
	// contains filtered or unexported fields
}

Queries 用于处理路径中的查询参数。

q,_ := ctx.Queries()
page := q.Int64("page", 1)
size := q.Int64("size", 20)
if q.HasErrors() {
    // do something
    return
}

func (*Queries) Bool

func (q *Queries) Bool(key string, def bool) bool

Bool 从查询参数中获取指定名称的值,若不存在则返回 def 作为其默认值。

func (*Queries) Errors

func (q *Queries) Errors() map[string]string

Errors 所有的错误信息

func (*Queries) Float64

func (q *Queries) Float64(key string, def float64) float64

Float64 从查询参数中获取指定名称的值,若不存在则返回 def 作为其默认值。

func (*Queries) HasErrors

func (q *Queries) HasErrors() bool

HasErrors 是否存在错误内容。

func (*Queries) Int

func (q *Queries) Int(key string, def int) int

Int 从查询参数中获取指定名称的值,若不存在则返回 def 作为其默认值。

若是无法转换,则会保存错误信息

func (*Queries) Int64

func (q *Queries) Int64(key string, def int64) int64

Int64 从查询参数中获取指定名称的值,若不存在则返回 def 作为其默认值。

func (*Queries) Result added in v0.21.0

func (q *Queries) Result(code int) *Result

Result 转换成 Result 对象

code 是作为 Result.Code 从错误消息中查找,如果不存在,则 panic。 Queries.errors 将会作为 Result.Detail 的内容。

func (*Queries) String

func (q *Queries) String(key, def string) string

String 从查询参数中获取指定名称的值,若不存在则返回 def 作为其默认值。

type Result added in v0.21.0

type Result struct {
	XMLName struct{} `json:"-" xml:"result" yaml:"-"`

	Message string    `json:"message" xml:"message,attr" yaml:"message"`
	Code    int       `json:"code" xml:"code,attr" yaml:"code"`
	Detail  []*detail `json:"detail,omitempty" xml:"field,omitempty" yaml:"detail,omitempty"`
	// contains filtered or unexported fields
}

Result 定义了出错时,向客户端返回的结构体。支持以下格式:

JSON:

{
    'message': 'error message',
    'code': 4000001,
    'detail':[
        {'field': 'username': 'message': '已经存在相同用户名'},
        {'field': 'username': 'message': '已经存在相同用户名'},
    ]
}

XML:

<result code="400" message="error message">
    <field name="username">已经存在相同用户名</field>
    <field name="username">已经存在相同用户名</field>
</result>

YAML:

message: 'error message'
code: 40000001
detail:
  - field: username
    message: 已经存在相同用户名
  - field: username
    message: 已经存在相同用户名

FormData:

message=errormessage&code=4000001&detail.username=message&detail.username=message

func (*Result) Add added in v0.21.0

func (rslt *Result) Add(field, message string) *Result

Add 添加一条详细的错误信息。

若 field 与已有的同名,会出现多条同名记录。

func (*Result) Error added in v0.21.0

func (rslt *Result) Error() string

func (*Result) Exit added in v0.21.0

func (rslt *Result) Exit()

Exit 将当前的实例输出到客户端,并退出当前请求

func (*Result) HasDetail added in v0.21.0

func (rslt *Result) HasDetail() bool

HasDetail 是否包含详细的错误信息

func (*Result) MarshalForm added in v0.21.0

func (rslt *Result) MarshalForm() ([]byte, error)

MarshalForm 为 form.Marshaler 接口实现。用于将 result 对象转换成 form 数据格式

func (*Result) Render added in v0.21.0

func (rslt *Result) Render()

Render 将当前的实例输出到客户端

func (*Result) SetDetail added in v0.21.0

func (rslt *Result) SetDetail(fields map[string]string) *Result

SetDetail 设置详细的错误信息

会覆盖由 Add() 添加的内容

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL