Estou tentando criar um pequeno pacote para analisar a saída da linha de comando, Fscanf
mas recebo um erro
E no Command.FscanF
método como passar a ...interface{}
para a próxima função?
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)
}
erro
cutil/command.go:25:23: não pode usar c.out (variável do tipo bytes.Buffer) como valor io.Reader no argumento para fmt.Fscanf: bytes.Buffer não implementa io.Reader (método Read tem ponteiro receptor )
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
Como você pode ver, o
Read
receptor do método é um ponteiro (*Buffer
), e é por isso que o erro diz:Isso significa que você não pode usar
bytes.Buffer
asio.Reader
, em vez disso, você deve usar*bytes.Buffer
.Para passar os elementos de uma fatia como argumentos individuais para uma função variádica, você deve adicionar
...
após o argumento da fatia, por exemploa...
, .