You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: project.go
    path of file: ./repos/TarsGo/tars/tools/tarsgo/internal/base
    
    the code of the file until where you have to start completion: package base

import (
	"context"
	"fmt"
	"github.com/AlecAivazis/survey/v2"
	"github.com/fatih/color"
	"github.com/mitchellh/go-homedir"
	"os"
	"os/exec"
	"path"
)

// Project is a project template.
type Project struct {
	App          string
	Server       string
	Servant      string
	GoModuleName string
}

func NewProject(app, server, servant, goModuleName string) *Project {
	return &Project{
		App:          app,
		Server:       server,
		Servant:      servant,
		GoModuleNa
    
func (p *Project) Create(ctx context.Context, dir string, mgrType string) error {
	to := path.Join(dir, p.Server)
	if _, err := os.Stat(to); !os.IsNotExist(err) {
		fmt.Printf("ğŸš« %s already exists\n", p.Server)
		override := false
		prompt := &survey.Confirm{
			Message: "ğŸ“‚ Do you want to override the folder ?",
			Help:    "Delete the existing folder and create the project.",
		}
		e := survey.AskOne(prompt, &override)
		if e != nil {
			return e
		}
		if !override {
			return err
		}
		os.RemoveAll(to)
	}

	if !IsExistTars2go() {
		if err := GoInstall("github.com/TarsCloud/TarsGo/tars/tools/tars2go"); err != nil {
			return err
		}
	}

	fmt.Printf("ğŸš€ Creating server %s.%s, please wait a moment.\n\n", p.App, p.Server)

	if err := DoGenProject(p, to, mgrType); err != nil {
		return err
	}

	if err := os.Rename(path.Join(to, "Servant.tars"), path.Join(to, p.Servant+".tars")); err != nil {
		return err
	}

	if err := os.Rename(path.Join(to, "Servant_imp.go"), path.Join(to, p.Servant+"_imp.go")); err != nil {
		return err
	}

	cmd := exec.CommandContext(ctx, "go", "mod", "init", p.GoModuleName)
	cmd.Dir = to
	out, err := cmd.CombinedOutput()
	if err != nil {
		return err
	}
	fmt.Println(string(out))
	Tree(to, dir)

	fmt.Printf("\n>>> Greatï¼Done! You can jump in %s\n", color.GreenString(p.Server))
	fmt.Println(">>> Tips: After editing the Tars file, execute the following cmd to automatically generate golang files.")
	fmt.Printf(">>>       %s/bin/tars2go *.tars\n", os.Getenv("GOPATH"))

	fmt.Println(color.WhiteString("$ cd %s", p.Server))
	fmt.Println(color.WhiteString("$ ./start.sh"))
	fmt.Println("ğŸ¤ Thanks for using TarsGo")
	fmt.Println("ğŸ“š Tutorial: https://doc.tarsyun.com/")
	return nil
}