Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在Go中打印字节缓冲区时的不同行为_String_Pointers_Go_Struct - Fatal编程技术网

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。