Golang使用bufio.Scanner多次扫描同一行

时间:2018-12-07 11:26:03

标签: file go

我正在编写一个代码,该代码可以扫描测试文件并将文本替换为其他内容。想要用堆叠在另一个下方的不同文本替换同一行。我发现一个选择是使用ioreader的tee功能,但是有更好的方法来实现这一点。

例如,我要实现的目标是用不同的字符串,例如ToStringConsole.WriteLine(String.Format(" {0:F20}", newValue));等替换下面文本中的newValue子字符串。 要获得如下输出:

文本:

methodtype

输出:

GET

1 个答案:

答案 0 :(得分:0)

要替换文本,可以使用文本/模板代替bufio:

游乐场:https://play.golang.org/p/7HYBqxtJ3KB

package main

import (
    "fmt"
    "text/template"
    "os"
)

type method struct {
    MethodType string
}

func main() {

    buf := `router.Methods("{{.MethodType}}").Path(templatepackagespec.MethodtypePath).Handler(kitHttp.NewServer(endpoints.FuncnameEndpoint
httptransport.EncodeResponse, append(options, kitHttp.ServerBefore())...
`

    tmpl, err := template.New("test").Parse(buf)
    if err != nil {
        panic(err)
    }

    methods := []string{"GET", "PUT", "POST"}

    for _, m := range methods {
        err = tmpl.Execute(os.Stdout, method{MethodType: m})
        if err != nil {
            fmt.Println(err.Error())
        }
    }

}

输出:

router.Methods("GET").Path(templatepackagespec.MethodtypePath).Handler(kitHttp.NewServer(endpoints.FuncnameEndpoint
httptransport.EncodeResponse, append(options, kitHttp.ServerBefore())...
router.Methods("PUT").Path(templatepackagespec.MethodtypePath).Handler(kitHttp.NewServer(endpoints.FuncnameEndpoint
httptransport.EncodeResponse, append(options, kitHttp.ServerBefore())...
router.Methods("POST").Path(templatepackagespec.MethodtypePath).Handler(kitHttp.NewServer(endpoints.FuncnameEndpoint
httptransport.EncodeResponse, append(options, kitHttp.ServerBefore())...