Last active
May 15, 2021 11:04
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} | |
} | |
} |
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
go run domc.go -domain user
Will create: