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

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


最小的例子


package main


import (

    "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 type

main.go:14: bytes.Buffer literal is not a type


互换的青春
浏览 328回答 1
1回答

慕桂英3389331

您可以在Type 开关中使用Short 变量声明在分支中具有类型化值:caseswitch v := any.(type) {case bytes.Buffer: // return as is    return v.String() // Here v is of type bytes.Buffer}在Go Playground上试一试。引用形式规范:TypeSwitchGuard 可能包含一个简短的变量声明。当使用这种形式时,变量在每个子句中隐式块的开始处声明。在 case 只列出一种类型的子句中,变量具有该类型;否则,该变量具有 TypeSwitchGuard 中表达式的类型。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go