这是问题的代码。比较这两种缓冲区类型表明它们不相等,但两个 *File 类型是相等的。func main() { var v, w io.Writer v := &bytes.Buffer{} w := &bytes.Buffer{} v.Write([]byte("Hello")) w.Write([]byte("Hello")) fmt.Println(v == w) // false v := os.Stdout w := os.Stdout v.Write([]byte("Hello")) w.Write([]byte("Hello")) fmt.Println(v == w) // true}
1 回答
HUWWW
TA贡献1874条经验 获得超12个赞
您正在比较指针,而不是对象。该表达式&bytes.Buffer{}在内存中创建一个新对象并返回一个指向它的指针。这样做两次会给出两个不同的指针,因为没有两个对象可以驻留在同一个内存位置。
要比较缓冲区的实际内容,请使用类似bytes.Compare(v.Bytes(), w.Bytes())
v := &bytes.Buffer{}
w := &bytes.Buffer{}
v.Write([]byte("Hello"))
w.Write([]byte("Hello"))
fmt.Printf("%p, %p\n", v, w) // prints 2 different values
fmt.Println(bytes.Compare(v.Bytes(), w.Bytes())) // 0, means "equal"
关于第二种情况,os.Stdout是一个包含指向 的指针的全局变量os.File,因此该片段比较了指向同一个对象的两个指针。
v := os.Stdout
w := os.Stdout
v.Write([]byte("Hello"))
w.Write([]byte("Blah!")) // doesn't matter
fmt.Println(v == w) // true: v and w point to the same object!
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报
0/150
提交
取消