为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 interface{} 转换为 bytes.Buffer

如何将 interface{} 转换为 bytes.Buffer

Go
互换的青春 2021-09-21 17:35:07
如何转换interface{}为bytes.Buffer?最小的例子package mainimport (    "bytes"    "fmt")func ToJson5(any interface{}) string {    if any == nil {        return `''`    }    switch any.(type) {    case bytes.Buffer: // return as is        return any.(bytes.Buffer).String()    // other types works fine    }    return ``}func main() {    x := bytes.Buffer{}    fmt.Println(ToJson5(x))}错误是:main.go:14: cannot call pointer method on any.(bytes.Buffer)main.go:14: cannot take the address of any.(bytes.Buffer)当改为bytes.Buffer{}(我认为不太正确)时,错误是:main.go:13: bytes.Buffer literal (type bytes.Buffer) is not a typemain.go:14: bytes.Buffer literal is not a type
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您可以在Type 开关中使用Short 变量声明在分支中具有类型化值:case


switch v := any.(type) {

case bytes.Buffer: // return as is

    return v.String() // Here v is of type bytes.Buffer

}

在Go Playground上试一试。


引用形式规范:


TypeSwitchGuard 可能包含一个简短的变量声明。当使用这种形式时,变量在每个子句中隐式块的开始处声明。在 case 只列出一种类型的子句中,变量具有该类型;否则,该变量具有 TypeSwitchGuard 中表达式的类型。


查看完整回答
反对 回复 2021-09-21
  • 1 回答
  • 0 关注
  • 327 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信