当前位置: 首页 > 面试题库 >

如何转换(类型* bytes.Buffer)以用作w.Write参数中的[] byte

家经纶
2023-03-14
问题内容

我正在尝试从服务器返回一些json,但是使用以下代码获取此错误

cannot use buffer (type *bytes.Buffer) as type []byte in argument to w.Write

稍加谷歌搜索,我找到了这个答案,但无法使其正常工作(请参阅第二个代码示例,并显示错误消息)

第一个代码样本

buffer := new(bytes.Buffer)

for _, jsonRawMessage := range sliceOfJsonRawMessages{
    if err := json.Compact(buffer, jsonRawMessage); err != nil{
        fmt.Println("error")

    }

}   
fmt.Println("json returned", buffer)//this is json
w.Header().Set("Content-Type", contentTypeJSON)

w.Write(buffer)//error: cannot use buffer (type *bytes.Buffer) as type []byte in argument to w.Write

第二个代码示例有错误

cannot use foo (type *bufio.Writer) as type *bytes.Buffer in argument to json.Compact
 cannot use foo (type *bufio.Writer) as type []byte in argument to w.Write


var b bytes.Buffer
foo := bufio.NewWriter(&b)

for _, d := range t.J{
    if err := json.Compact(foo, d); err != nil{
        fmt.Println("error")

    }

}


w.Header().Set("Content-Type", contentTypeJSON)

w.Write(foo)

问题答案:

写操作需要一个[]byte(字节片),而您有一个*bytes.Buffer(指向缓冲区的指针)。

您可以使用Buffer.Bytes()从缓冲区中获取数据,并将其提供给Write()

_, err = w.Write(buffer.Bytes())

…或使用Buffer.WriteTo()将缓冲区内容直接复制到Writer

_, err = buffer.WriteTo(w)

使用a bytes.Buffer并非绝对必要。
json.Marshal()[]byte直接返回一个:

var buf []byte

buf, err = json.Marshal(thing)

_, err = w.Write(buf)


 类似资料:
  • 我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类

  • 我正试图解决一个泛型问题。我在做一些手工选角,感觉好像我做错了什么。我对使用泛型有点陌生,所以很有可能我在某些方面误用了它们。如能提供指导,将不胜感激。 TLDR: 我有一个带有泛型方法的接口,该泛型方法采用参数。我在一个类中实现了这个接口,但在实现器中,我希望确保是特定类型的(假设,这样我就可以提取一些字段)。我怎么能那样做? 详细信息: 下面有一个接口和一个实现类,其中。 具有以下定义: 而具

  • 问题内容: 我有以下两节课: 和: 当我运行测试时,一切都是笨拙的。如果我将类型参数化更改为: 编译器抱怨,报告: 错误:类型不兼容的整数不能转换为T number = new Integer(11); 其中T是类型变量T扩展了在方法getSomeValue(boolean)中声明的Object 它同样对Double有所抱怨。为什么? 编辑:我犯了一个错误。这实际上是有效的代码。 现在我明白了@S

  • 问题内容: 如何将类型的值转换为期望的参数类型? 问题答案: 这是Swift 4的新功能。所有采用字符串标识符和/或字典键的Cocoa方法现在都具有自己的键类型。这样做的原因是增加了一些类型安全性- 在旧的情况下,可能会错误地误传递原本打算与其他API一起使用的常量,但是现在在Swift 4中,这将导致编译错误。 将方法签名更改为: 编辑: 为Swift 4.2更新!已重命名为。

  • 我正在尝试创建一个。我想直接使用它。e、 g.。但是,当从转换为

  • 本文向大家介绍把对象转换到数字类型是如何转换的?相关面试题,主要包含被问及把对象转换到数字类型是如何转换的?时的应答技巧和注意事项,需要的朋友参考一下 1、如果对象有valueOf方法,则调用该方法,并返回相应的结果; 2、当调用valueOf返回的依然不是数字,则会调用对象的toString方法,并返回相应的结果; 3、否则抛出异常。