在Windows上使用exec.Command进行Noverify

I want to use VKCOM/noverify to analyse code. Calling it from the command-line (windows dos shell) using this command works

 noverify.exe -exclude-checks arraySyntax,phpdocLint 
              -output result.txt 
              C:\Dev\PHP\ResourceSpace_9_0_13357\include

The trouble is that i am unable to pass arguments to cmnd := exec.Command("noverify.exe", args)

options := " -exclude-checks arraySyntax, PHPDoc"
pathToCode := "C:\\Dev\\PHP\\ResourceSpace_9_0_13357\\include"

// this works
cmnd := exec.Command("noverify.exe", pathToCode)


args := []string{options, pathToCode}
arg := strings.Join(args, "")
// passing options does not work
// cmnd := exec.Command("noverify.exe", arg)    

b, err := cmnd.CombinedOutput()

What have i tried

You can find my source code in this gist It seems that args are joined as a string seperated by , despite that the separator is empty above.

Questions

  1. How to pass multiple arguments to exec.Comman("yourFoo.exe", cmdArgs...)
  2. Why is my attempt not working on windows?

There are multible options to pass arguments to exec.Command:

You can use multible strings as arguments:

cmd := exec.Command("your-command", "arg1", "arg2")

If you have a slice of arguments, you can use the spread operator

args := []string{"-exclude-checks", "arraySyntax,phpdocLint", "-output", "result.txt", "your-path"}
cmd := exec.Command("your-command", args...)

To question two: In your code

options := " -exclude-checks arraySyntax, PHPDoc"
pathToCode := "C:\\Dev\\PHP\\ResourceSpace_9_0_13357\\include"

args := []string{options, pathToCode}

you're passing two options to the external program. If you wrote the same on the command line, you pass

your-command.exe " -exclude-checks arraySyntax, PHPDoc" "your-path"

This doesn't work, and is also the reason your program doesn't work.

In short, whereever you put a space between in a command, you need to have a separate argument to exec.Command. The example also does this.