Skip to content

Instantly share code, notes, and snippets.

@kiselev-nikolay
Last active May 15, 2021 11:04
Show Gist options
  • Save kiselev-nikolay/6f81a6cb3452df4a22610adff1add7f8 to your computer and use it in GitHub Desktop.
Save kiselev-nikolay/6f81a6cb3452df4a22610adff1add7f8 to your computer and use it in GitHub Desktop.
Go cli script used to create go package or domain go package with mvc sub-packages
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"strings"
)
type PackageType int
const (
PackageModule = PackageType(iota)
PackageTest
)
var (
dry = true
domain = false
)
func makePackageFolder(dest string) {
fmt.Printf("dir: %s\n", dest)
if !dry {
err := os.Mkdir(dest, os.ModeDir)
if err != nil {
fmt.Printf("error: %v\n", err)
}
}
}
func getFileName(path string) string {
pathParts := strings.Split(strings.Trim(path, "/"), "/")
return pathParts[len(pathParts)-1]
}
func makePackage(dest string, packageType PackageType) {
packageName := getFileName(dest)
switch packageType {
case PackageTest:
packageName += "_test"
}
path := fmt.Sprintf("%v/%v.go", dest, packageName)
fmt.Printf("package: %s\n", path)
if !dry {
err := ioutil.WriteFile(path, []byte(fmt.Sprintf("package %v\n", packageName)), 0755)
if err != nil {
fmt.Printf("error: %v\n", err)
}
}
}
func init() {
flag.BoolVar(&dry, "dry", false, "dry run will not create any files or folders")
flag.BoolVar(&domain, "domain", false, "domain will create not only package but MVC domain")
}
func main() {
flag.Parse()
for _, dest := range flag.Args() {
_, err := os.Stat(dest)
if os.IsNotExist(err) || dry {
makePackageFolder(dest)
makePackage(dest, PackageTest)
if !domain {
makePackage(dest, PackageModule)
} else {
{
suffix := "models"
makePackageFolder(dest + "/" + suffix)
makePackage(dest+"/"+suffix, PackageModule)
}
{
suffix := "controllers"
makePackageFolder(dest + "/" + suffix)
makePackage(dest+"/"+suffix, PackageModule)
makePackage(dest+"/"+suffix, PackageTest)
}
{
suffix := "views"
makePackageFolder(dest + "/" + suffix)
makePackage(dest+"/"+suffix, PackageModule)
makePackage(dest+"/"+suffix, PackageTest)
}
}
} else {
fmt.Printf("error: %v\n", err)
}
}
}
@kiselev-nikolay
Copy link
Author

go run domc.go -domain user

Will create:

dir:     user
package: user/user_test.go
dir:     user/models
package: user/models/models.go
dir:     user/controllers
package: user/controllers/controllers.go
package: user/controllers/controllers_test.go
dir:     user/views
package: user/views/views.go
package: user/views/views_test.go

@kiselev-nikolay
Copy link
Author

go run domc.go user

Will create:

dir:     user
package: user/user.go
package: user/user_test.go

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment