diff --git a/cmd/gf/internal/cmd/genctrl/genctrl.go b/cmd/gf/internal/cmd/genctrl/genctrl.go index ad7c2ea96..37c97a206 100644 --- a/cmd/gf/internal/cmd/genctrl/genctrl.go +++ b/cmd/gf/internal/cmd/genctrl/genctrl.go @@ -37,7 +37,7 @@ gf gen ctrl ) const ( - PatternApiDefinition = `type\s+(\w+)Req\s+struct\s+{` + PatternApiDefinition = `type\s+(\w+)Req\s+struct\s+{([\s\S]+?)}` PatternCtrlDefinition = `func\s+\(.+?\)\s+\w+\(.+?\*(\w+)\.(\w+)Req\)\s+\(.+?\*(\w+)\.(\w+)Res,\s+\w+\s+error\)\s+{` ) diff --git a/cmd/gf/internal/cmd/genctrl/genctrl_calculate.go b/cmd/gf/internal/cmd/genctrl/genctrl_calculate.go index f1fe252aa..578fa7e98 100644 --- a/cmd/gf/internal/cmd/genctrl/genctrl_calculate.go +++ b/cmd/gf/internal/cmd/genctrl/genctrl_calculate.go @@ -43,11 +43,19 @@ func (c CGenCtrl) getApiItemsInSrc(apiModuleFolderPath string) (items []apiItem, return nil, err } for _, match := range matches { + var ( + methodName = match[1] + structBody = match[2] + ) + // ignore struct name that match a request, but has no g.Meta in its body. + if !gstr.Contains(structBody, `g.Meta`) { + continue + } item := apiItem{ Import: gstr.Trim(importPath, `"`), Module: gfile.Basename(apiModuleFolderPath), Version: gfile.Basename(apiVersionFolderPath), - MethodName: match[1], + MethodName: methodName, } items = append(items, item) } diff --git a/cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go b/cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go index 3d641a077..8d99299df 100644 --- a/cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go +++ b/cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go @@ -11,6 +11,7 @@ import ( "github.com/gogf/gf/cmd/gf/v2/internal/consts" "github.com/gogf/gf/cmd/gf/v2/internal/utility/mlog" + "github.com/gogf/gf/cmd/gf/v2/internal/utility/utils" "github.com/gogf/gf/v2/container/gmap" "github.com/gogf/gf/v2/container/gset" "github.com/gogf/gf/v2/frame/g" @@ -42,6 +43,11 @@ func (c *apiInterfaceGenerator) doGenerate(apiModuleFolderPath string, module st importPathMap = gmap.NewListMap() importPaths []string ) + // if there's already exist file that with the same but not auto generated go file, + // it uses another file name. + if !utils.IsFileDoNotEdit(moduleFilePath) { + moduleFilePath = gfile.Join(apiModuleFolderPath, fmt.Sprintf(`%s.if.go`, module)) + } // all import paths. importPathMap.Set("\t"+`"context"`, 1) importPathMap.Set("\t"+``, 1)