String 在Go中打印字节缓冲区时的不同行为
当我执行此命令时:String 在Go中打印字节缓冲区时的不同行为,string,pointers,go,struct,String,Pointers,Go,Struct,当我执行此命令时: buf := new(bytes.Buffer) buf.WriteString("Hello world") fmt.Println(buf) var buf bytes.Buffer buf.WriteString("Hello world") fmt.Println(buf) 它打印了Hello World 但如果我执行这个: buf := new(bytes.Buffer) buf.WriteString("Hello world") fmt.Println(bu
buf := new(bytes.Buffer)
buf.WriteString("Hello world")
fmt.Println(buf)
var buf bytes.Buffer
buf.WriteString("Hello world")
fmt.Println(buf)
它打印了Hello World
但如果我执行这个:
buf := new(bytes.Buffer)
buf.WriteString("Hello world")
fmt.Println(buf)
var buf bytes.Buffer
buf.WriteString("Hello world")
fmt.Println(buf)
它打印:{[72 101 108 108 111 32 119 111 114 108 100]0[72 101 108 108 111 32 119 111 114 108 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0}
我知道这是结构的内容,但为什么它以不同的格式打印?因为*bytes.Buffer类型的值具有*bytes.Buffer类型的字符串方法。Buffer包含字符串方法,而bytes类型的值不包含
fmt包检查正在打印的值是否有String方法,如果有,则调用它以生成值的字符串表示形式
从以下文件包中报价:
除非使用动词%T和%p打印,否则实现某些接口的操作数应考虑特殊的格式设置。按申请顺序:
如果操作数是一个reflect.Value,则该操作数将替换为它所持有的具体值,并继续打印下一条规则
如果操作数实现格式化程序接口,将调用它。格式化程序提供对格式化的精细控制
如果%v谓词与标志%v一起使用,并且操作数实现GoStringer接口,则将调用该接口
如果Println等的隐式%v格式对字符串%s%q%v%x%x有效,则以下两条规则适用:
如果操作数实现错误接口,将调用error方法将对象转换为字符串,然后根据谓词(如果有)的要求对字符串进行格式化
如果操作数实现方法String,则将调用该方法将对象转换为字符串,然后根据谓词(如果有)的要求对字符串进行格式化
String方法以字符串的形式返回其内容,这是在传递*bytes.Buffer类型的指针时看到的打印内容。当您传递bytes.Buffer类型的非指针值时,它会像普通结构值一样简单地打印,默认格式为:
{field0 field1 ...}
见相关/类似问题:
因为*bytes.Buffer类型的值有一个字符串方法*bytes.Buffer包含该字符串方法,而bytes.Buffer类型的值没有
fmt包检查正在打印的值是否有String方法,如果有,则调用它以生成值的字符串表示形式
从以下文件包中报价:
除非使用动词%T和%p打印,否则实现某些接口的操作数应考虑特殊的格式设置。按申请顺序:
如果操作数是一个reflect.Value,则该操作数将替换为它所持有的具体值,并继续打印下一条规则
如果操作数实现格式化程序接口,将调用它。格式化程序提供对格式化的精细控制
如果%v谓词与标志%v一起使用,并且操作数实现GoStringer接口,则将调用该接口
如果Println等的隐式%v格式对字符串%s%q%v%x%x有效,则以下两条规则适用:
如果操作数实现错误接口,将调用error方法将对象转换为字符串,然后根据谓词(如果有)的要求对字符串进行格式化
如果操作数实现方法String,则将调用该方法将对象转换为字符串,然后根据谓词(如果有)的要求对字符串进行格式化
String方法以字符串的形式返回其内容,这是在传递*bytes.Buffer类型的指针时看到的打印内容。当您传递bytes.Buffer类型的非指针值时,它会像普通结构值一样简单地打印,默认格式为:
{field0 field1 ...}
见相关/类似问题:
它当前打印缓冲区片中给定的ASCII字符的十进制表示形式。请参阅String of bytes.Buffer。它当前打印您在缓冲区片中给定的ASCII字符的十进制表示形式。请参阅字符串bytes.Buffer。