首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CRLF的godoc示例输出

使用CRLF的godoc示例输出
EN

Stack Overflow用户
提问于 2018-06-23 05:59:43
回答 1查看 354关注 0票数 3

我写了以下方法:

代码语言:javascript
复制
func (c *Component) Encode(w io.Writer){
    //encodes c and writes the bytes into w, containing a few CRLF linebreaks
}

我还编写了演示编码器的函数:

代码语言:javascript
复制
func ExampleComponent_Encode() {

    c := &Component{
        Name: "DESCRIPTION",
    }
    c.Encode(os.Stdout)
    //Output:
    //BEGIN:DESCRIPTION
    //END:DESCRIPTION
}

现在的问题是,这个示例无法执行go test命令,因为注释中的换行符是\n换行符(我在Linux上),而c.Encode生成的换行符必须是\r\n(CRLF)换行符(按照某些规范的定义)。

我怎样才能让这个例子在保持简单的同时不会导致go test失败?有没有办法在换行符上提示go test/godoc,或者让它们变得更宽松一些?

我可以手动编辑这两行的换行符,也可以编辑整个代码库,但这将是非常脆弱的,我希望避免这种解决方案。

EN

回答 1

Stack Overflow用户

发布于 2018-06-24 01:39:40

Encode io.Writer重定向到缓冲区。在缓冲区中,将示例输出的CRLF (\r\n)替换为LF (\n)。例如,

example_test.go

代码语言:javascript
复制
package main

import (
    "bytes"
    "fmt"
    "io"
    "os"
    "strings"
)

type Component struct{ Name string }

func (c *Component) Encode(w io.Writer) {
    //encodes c and writes the bytes into w, containing a few CRLF linebreaks
    w.Write([]byte("BEGIN:" + c.Name + "\r\n"))
    w.Write([]byte("END:" + c.Name + "\r\n"))
}

func ExampleComponent_Encode() {
    var buf bytes.Buffer
    c := &Component{
        Name: "DESCRIPTION",
    }
    c.Encode(&buf)

    output := strings.Replace(buf.String(), "\r\n", "\n", -1)
    fmt.Fprintf(os.Stdout, "%s", output)
    //Output:
    //BEGIN:DESCRIPTION
    //END:DESCRIPTION
}

输出:

代码语言:javascript
复制
$ go test -v example_test.go
=== RUN   ExampleComponent_Encode
--- PASS: ExampleComponent_Encode (0.00s)
PASS
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50996081

复制
相关文章

相似问题

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