我正在尝试构建一个小包来解析命令行输出,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)
https://pkg.go.dev/[email protected]#Buffer.Read
正如您所看到的,该
Read
方法的接收者是一个指针 (*Buffer
),这就是错误显示的原因:这意味着您不能使用
bytes.Buffer
asio.Reader
,而必须使用*bytes.Buffer
.要将切片的元素作为单独的参数传递给可变参数函数,您必须
...
在切片参数之后添加,例如a...
。