gpt4 book ai didi

json - 检查值是否为 typeof struct

转载 作者:IT王子 更新时间:2023-10-29 02:06:01 25 4
gpt4 key购买 nike

我想在 Context 上实现一个 Send 方法,它将给定的对象写入 http.ResponseWriter

目前我有:

package context

import (
"net/http"
)

type Context struct {
Request *http.Request
ResponseWriter http.ResponseWriter
}

type Handle func(*Context)

func New(w http.ResponseWriter, r *http.Request) *Context {
return &Context{r, w}
}

func (c *Context) Send(value interface{}, code int) {
c.WriteHeader(code)

switch v := value.(type) {
case string:
c.Write(byte(value))
//default:
//json, err := json.Marshal(value)

//if err != nil {
// c.WriteHeader(http.StatusInternalServerError)
// c.Write([]byte(err.Error()))
//}

//c.Write([]byte(json))
}
}

func (c *Context) WriteHeader(code int) {
c.ResponseWriter.WriteHeader(code)
}

func (c *Context) Write(chunk []byte) {
c.ResponseWriter.Write(chunk)
}

如您所见,我注释掉了一些内容以便程序编译。我想在该部分中做的是支持应为我转换为 JSON 的自定义结构。

  1. 如何为任何 (mgo) 结构使用类型开关?
  2. 在我可以将它与 JSON.Marshall 一起使用之前如何转换该结构?

最佳答案

你真的应该知道你的类型,但是你有 3 个选择。

示例:

func (c *Context) Send(value interface{}, code int) {
c.WriteHeader(code)
v := reflect.ValueOf(value)
if v.Kind() == reflect.Struct || v.Kind() == reflect.Ptr && v.Elem().Kind() == reflect.Struct {
json, err := json.Marshal(value)

if err != nil {
c.WriteHeader(http.StatusInternalServerError)
c.Write([]byte(err.Error()))
break
}
c.Write([]byte(json))
} else {
c.Write([]byte(fmt.Sprintf("%v", value)))
}
}
  • 有 2 个不同的函数,一个用于结构,一个用于 native 类型,这是最干净/最有效的方法。
  • 选择所有原生类型并处理它们,然后像​​您一样使用默认值。

例子:

func (c *Context) Send(value interface{}, code int) {
c.WriteHeader(code)

switch v := value.(type) {
case string:
c.Write([]byte(v))
case byte, rune, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64,
float32, float64:
c.Write([]byte(fmt.Sprintf("%v", v)))
default: //everything else just encode as json
json, err := json.Marshal(value)

if err != nil {
c.WriteHeader(http.StatusInternalServerError)
c.Write([]byte(err.Error()))
break
}

c.Write(json) //json is already []byte, check http://golang.org/pkg/encoding/json/#Marshal
}
}

关于json - 检查值是否为 typeof struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com