引用未定义的标识符字节。

时间:2019-03-06 15:25:52

标签: go replace slice replaceall

我正在尝试构建一个简单的Web服务器。我想用\n替换所有<br>。 我想为此使用bytes,因为我的页面正文存储为[]byte

为此,我使用bytes.ReplaceAll()。但它一直在说这是对未定义标识符的引用。

有人可以告诉我为什么吗?我在在线编译器中尝试了完全相同的方法,并且工作正常。我想念图书馆吗?

请参见下面的代码:

import (
    "bytes"
    "html/template"
    "io/ioutil"
    "log"
    "net/http"
    "regexp"
)

type Page struct {
    Title string
    Body  []byte
}

func editHandler(w http.ResponseWriter, r *http.Request, title string) {
    p, err := loadPage(title)
    if err != nil {
        p = &Page{Title: title}
    }
    // THE LINE THAT CAUSES TROUBLE
    p.Body = bytes.ReplaceAll(p.Body, []byte("\n"), []byte("<br>"))

    renderTemplate(w, "edit", p)
}

2 个答案:

答案 0 :(得分:6)

bytes软件包是标准库的一部分,因此如果您拥有go工具,则不太可能没有。

但是请注意,bytes.ReplaceAll()中添加了Go 1.12,因此,如果您使用的是较旧的Go SDK,则此功能将不可用。

执行go version进行查找。从官方网站获取最新的Go:https://golang.org/dl/

答案 1 :(得分:0)

进一步到icza的answer

为了使1.12之前的Go版本受益,以下是等效的:

bytes.ReplaceAll(a, b, c)

bytes.Replace(a, b, c, -1)

请参见ReplaceAll

的实现