func init() { var argc int32 cmd := syscall.GetCommandLine() argv, e := syscall.CommandLineToArgv(cmd, &argc) if e != 0 { return } defer syscall.LocalFree(uint32(uintptr(unsafe.Pointer(argv)))) Args = make([]string, argc) for i, v := range (*argv)[:argc] { Args[i] = string(syscall.UTF16ToString((*v)[:])) } }
// CommandLineToArgv wraps the Windows syscall to turn a commandline into an argument array. func CommandLineToArgv(commandLine string) ([]string, error) { var argc int32 argsPtr, err := syscall.UTF16PtrFromString(commandLine) if err != nil { return nil, err } argv, err := syscall.CommandLineToArgv(argsPtr, &argc) if err != nil { return nil, err } defer syscall.LocalFree(syscall.Handle(uintptr(unsafe.Pointer(argv)))) newArgs := make([]string, argc) for i, v := range (*argv)[:argc] { newArgs[i] = string(syscall.UTF16ToString((*v)[:])) } return newArgs, nil }