我试图构建一个小的包来用Fscanf
解析命令行输出,但得到一个错误
在Command.FscanF
方法中如何将a ...interface{}
传递给下一个函数?
package cutil
import (
"fmt"
"bytes"
"os/exec"
)
type Command struct {
out bytes.Buffer
}
func (c *Command) Run(command string){
cmd := exec.Command("bash", "-c", command)
cmd.Stdout = &c.out
err := cmd.Run()
if err != nil {
panic(err)
}
fmt.Println(c.out.String())
}
func (c *Command) Fscanf(format string, a ...interface{}){
n, err := fmt.Fscanf(c.out, format, a)
if err != nil {
panic(err)
}
fmt.Println(n)
}
误差
cutil/command.go:25:23:不能使用c.out(bytes.Buffer类型的变量)作为fmt.Fscanf的参数中的io.Reader值:bytes.Buffer没有实现io.Reader(方法Read有指针接收器)
c := &cutil.Command{}
c.Run(fmt.Sprintf("netstat -nlp | grep :%d", 3000))
var (
t string
i int
)
c.Fscanf("%s %d", &t, &i)
fmt.Println(t, i)
1条答案
按热度按时间ffscu2ro1#
https://pkg.go.dev/[email protected]#Buffer.Read
正如你所看到的,
Read
方法的接收器是一个指针(*Buffer
),这就是为什么错误说:bytes.Buffer没有实现io.Reader(方法Read有指针接收器)
这意味着您不能将
bytes.Buffer
用作io.Reader
,而是必须使用*bytes.Buffer
。要将切片的元素作为单独的参数传递给可变参数函数,必须在切片参数后添加
...
,例如。a...
。