123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // Copyright 2025 BackendServerTemplate Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
- package mod
- import (
- "fmt"
- "github.com/SongZihuan/BackendServerTemplate/tool/utils/cleanstringutils"
- "log"
- "os"
- "regexp"
- "strings"
- "sync"
- )
- const FileGoMod = "./go.mod"
- const module = "module"
- var validModuleNameRegex = regexp.MustCompile(`^[a-zA-Z0-9]+([./-]?[a-zA-Z0-9]+)*$`)
- var once sync.Once
- var goModuleName string = ""
- func GetGoModuleName() (string, error) {
- var err error
- once.Do(func() {
- goModuleName, err = getGoModuleName()
- })
- if goModuleName == "" && err == nil {
- err = fmt.Errorf("go module name not found")
- }
- return goModuleName, err
- }
- func getGoModuleName() (string, error) {
- log.Println("generate: find the go mod name")
- defer log.Println("generate: find the go mod name finish")
- dat, err := os.ReadFile(FileGoMod)
- if err != nil {
- return "", err
- }
- goMod := strings.TrimPrefix(cleanstringutils.GetString(string(dat)), "\n")
- moduleLine := strings.TrimSpace(strings.Split(goMod, "\n")[0])
- if !strings.Contains(moduleLine, module) && len(moduleLine) > len(module) {
- return "", fmt.Errorf("go.mod error: %s not found", module)
- }
- moduleName := cleanstringutils.GetStringOneLine(moduleLine[len(module):])
- if !IsValidGoModuleName(moduleName) {
- return "", fmt.Errorf("go.mod error: '%s' is not a valid go module name", moduleName)
- }
- log.Printf("generate: go mod name get: %s\n", moduleName)
- return moduleName, nil
- }
- func IsValidGoModuleName(name string) bool {
- return validModuleNameRegex.MatchString(name)
- }
|