gf icon indicating copy to clipboard operation
gf copied to clipboard

os/gcmd: Parsing error when creating a subcommand from a structure and the subcommand has multiple parameters.

Open wsy9981999 opened this issue 7 months ago • 1 comments

Go version

go version go1.22.4 windows/amd64

GoFrame version

2.7.2

Can this bug be reproduced with the latest release?

Option Yes

What did you do?

// main.go
func main() {
	gcmd.Init("main.go gen controller app data")
	ctx := gctx.GetInitCtx()
	object, err := gcmd.NewFromObject(cmd.Wg)
	if err != nil {
		g.Log().Fatalf(ctx, "%+v", err)
	}
	if err := object.AddObject(cmd.Gen); err != nil {
		g.Log().Fatalf(ctx, "%+v", err)
	}
	if path, _ := gfile.Search(cliFolderName); path != "" {
		if adapter, ok := g.Cfg().GetAdapter().(*gcfg.AdapterFile); ok {
			if err := adapter.SetPath(path); err != nil {
				util.Fatal(err)
			}
		}
	}
	object.Run(ctx)

}

// internal/ cmd/wg_gen.go
package cmd

import (
	"context"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gcmd"
)

var Wg = &cWg{}

type (
	cWg struct {
		g.Meta `name:"wg"`
	}
	cWgInput struct {
		g.Meta `name:"wg"`
	}
	cWgOutput struct {
	}
)

func (receiver *cWg) Index(ctx context.Context, in cWgInput) (out *cWgOutput, err error) {
	gcmd.CommandFromCtx(ctx).Print()
	return nil, err
}

// internal/ cmd/wg_gen.go
package cmd

import (
	"github.com/gogf/gf/v2/frame/g"
)

var Gen = cGen{}

type (
	cGen struct {
		g.Meta `name:"gen"`
		cGenController
	}
)

// internal/ cmd/wg_gen_controller.go
package cmd

import "wsy-generator/internal/cmd/gen_controller"

type cGenController = gen_controller.GenController
// internal/cmd/gen_controller/gen_controller.go
package gen_controller

import (
	"context"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gfile"
	"github.com/gogf/gf/v2/text/gstr"
	"net/http"
	"sync"
	"wsy-generator/internal/consts"
	"wsy-generator/internal/util"
)

type (
	GenController struct {
		g.Meta `name:"controller"`
	}
	GenControllerInput struct {
		g.Meta         `name:"controller" config:"gfcli.gen.ctrl" `
		A       string `name:"a" arg:"true"`
		B string `name:"b" arg:"true"`
	}
	GenControllerOutput    struct{}
)
func (receiver GenController) Index(ctx context.Context, in GenControllerInput) (out *GenControllerOutput, err error) {
  return 
}

What did you see happen?

当命令行为wg gen controller a b时,最后一个代码片段中in.A=="b",in.B==""

What did you expect to see?

当命令行为wg gen controller a b时,最后一个代码片段中in.A=="a" ,in.B=="b"

wsy9981999 avatar Jun 30 '24 19:06 wsy9981999