首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >写到戈朗缓冲区的开头?

写到戈朗缓冲区的开头?
EN

Stack Overflow用户
提问于 2016-10-25 05:07:10
回答 2查看 9K关注 0票数 6

我有:

代码语言:javascript
运行
复制
var buffer bytes.Buffer
s := "something to do"
for i := 0; i < 10; i++ {
   buffer.WriteString(s)
}

哪个附加到缓冲区,是否可以写入缓冲区的开头?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-25 05:15:53

由于基础buf不是从bytes.Buffer导出的,所以可以使用:

代码语言:javascript
运行
复制
buffer.WriteString("B")
s := buffer.String()
buffer.Reset()
buffer.WriteString("A")
buffer.WriteString(s)

试试这个围棋游乐场

代码语言:javascript
运行
复制
package main

import (
    "bytes"
    "fmt"
)

func main() {
    var buffer bytes.Buffer
    buffer.WriteString("B")
    s := buffer.String()
    buffer.Reset()
    buffer.WriteString("A" + s)
    fmt.Println(buffer.String())
}

产出:

代码语言:javascript
运行
复制
AB
票数 6
EN

Stack Overflow用户

发布于 2016-10-25 07:51:54

插入到开头是不可能的,见Amd的答案为“解决办法”。如果要在开头覆盖内容,请继续阅读。

注意,没有导出内部字节片Buffer.buf,但是方法Buffer.Bytes()返回一个与Buffer.buf内部片共享相同的支持数组的切片。

这意味着,如果通过调用bytes.Buffer创建一个新的Bytes.NewBuffer(),并在将其重新划分为保留的零长度和容量后将其传递给它,则可以将其写入缓冲区的开头,覆盖第一个缓冲区的原始数据。

参见此示例:

代码语言:javascript
运行
复制
buf := &bytes.Buffer{}
buf.WriteString("Hello  World")
fmt.Println("buf:", buf)

buf2 := bytes.NewBuffer(buf.Bytes()[:0])
buf2.WriteString("Gopher")
fmt.Println("buf:", buf)
fmt.Println("buf2:", buf2)

输出(在围棋游乐场上尝试):

代码语言:javascript
运行
复制
buf: Hello  World
buf: Gopher World
buf2: Gopher

注意:使用这种技术,您还可以在任意位置覆盖内容,方法是使用所需的索引而不是0,并传递切片。例如:

代码语言:javascript
运行
复制
buf := &bytes.Buffer{}
buf.WriteString("Hello  World")
fmt.Println("buf:", buf)

buf2 := bytes.NewBuffer(buf.Bytes()[6:6]) // Start after the "Hello"
buf2.WriteString("Gopher")
fmt.Println("buf:", buf)
fmt.Println("buf2:", buf2)

输出(在围棋游乐场上尝试):

代码语言:javascript
运行
复制
buf: Hello  World
buf: Hello Gopher
buf2: Gopher

请注意,通过Buffer.Bytes()返回的切片对内容的“操作”只有在修改Buffer之后才能成功,在此之后,Buffer有可能分配一个新的支持数组,并且您拥有的那个数组将被“分离”(因此对它的进一步修改不会反映在原始Buffer中):

该片只能在下一次缓冲区修改之前使用(也就是说,直到下一次调用方法(如读、写、重置或截断)为止)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40231761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档