func NewTerminal(user string) (t *Terminal, err error) {
	if user == "" {
		err = fmt.Errorf("User cant be empty")
		return
	}
	if authErr := authorizeUser(user); authErr != nil {
		err = fmt.Errorf("You (%s) are not allowed to use terminal and execute commands", user)
		return
	}
	t = &Terminal{currentUser: user}
	return
}
NewTerminal creates new instance of terminal
package main
import (
	"fmt"
)
func main() {
	t, err := NewTerminal("gopher")
	if err != nil {
		panic(err.Error())
	}
	excResp, excErr := t.Execute("say_hi")  
	if excErr != nil {
		fmt.Printf("ERROR: %s\n", excErr.Error())  
	}
	fmt.Println(excResp)  
}
type ITerminal interface {
	Execute(cmd string) (resp string, err error)
}
type GopherTerminal struct {
	User string
}
func (gt *GopherTerminal) Execute(cmd string) (resp string, err error) {
	prefix := fmt.Sprintf("%s@go_term$:", gt.User)
	switch cmd {
	case "say_hi":
		resp = fmt.Sprintf("%s Hi %s", prefix, gt.User)
	case "man":
		resp = fmt.Sprintf("%s Visit 'https://golang.org/doc/' for Golang documentation", prefix)
	default:
		err = fmt.Errorf("%s Unknown command", prefix)
	}
	return
}
type Terminal struct {
	currentUser    string
	gopherTerminal *GopherTerminal
}