package test type Cmd interface { Result() bool Output() string } type cmd struct { r bool o string } func (c *cmd) exec(s string, args ...string) { //.... // c.r = ... //c.o = ... } func (c *cmd) Result() bool { return c.r } func (c *cmd) Output() string { return c.o } func Exec(s string, args ...string) Cmd { c := &cmd{} c.exec(s, args...) return c }