Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Спецификация языка программирования Go
Передача аргументов параметрам ...
Если f является переменным с конечным типом параметра ... T, то внутри функции аргумент эквивалентен параметру типа [] T. При каждом вызове f аргумент, передаваемый окончательному параметру, представляет собой новый срез типа [] T, последовательные элементы которого являются фактическими аргументами, которые все должны быть назначены типу T. Следовательно, длина среза равна числу аргументы, связанные с конечным параметром, и могут различаться для каждого сайта вызова.
blockquote>
func Command(name string, arg ...string) *Cmd
Команда возвращает структуру Cmd для выполнения именованной программы с заданными аргументами.
Возвращенное поле Cmd's Args построено из имени команды по элементам arg, поэтому arg не должен включать имя самой команды. Например, команда («эхо», «привет»)
blockquote>
Например,
package main import ( "fmt" "os/exec" ) func main() { name := "echo" args := []string{"hello", "world"} cmd := exec.Command(name, args...) out, err := cmd.Output() if err != nil { fmt.Println(err) } fmt.Println(string(out)) }
Выход:
hello world
Список аргументов команды можно получить из функции флажка Args()
. Затем вы можете передать это функции с использованием стиля вариационного ввода (func(input...)
)
Из Spec :
Если f является вариационным с конечным типом параметра ... T, то внутри функции аргумент эквивалентен параметру типа [] T. При каждом вызове f аргумент, передаваемый окончательному параметру, представляет собой новый срез типа [] T, последовательные элементы которого являются фактическими аргументами, которые все должны быть назначены типу T.
blockquote>Пример:
package main import "fmt" func echo(strings ...string) { for _, s := range strings { fmt.Println(s) } } func main() { strings := []string{"a", "b", "c"} echo(strings...) // Treat input to function as variadic }
Подробнее см. В Спецификация Go .
func Command(name string, arg ...string) *Cmd
Команда возвращает структуру Cmd для выполнения именованной программы с заданными аргументами.
blockquote>] Итак, вам нужно извлечь команду, найденную в
sliceA[0]
, а затем передать все аргументы с переменной, но удалить командуsliceA[1:]...
.import "os/exec" import "strings" func main(){ plainCommand := "echo hello world" sliceA := strings.Fields(plainCommand) cmd := exec.Command(sliceA[0], sliceA[1:]...) }
...
после аргументов. Это выглядит странно – The user with no hat 18 May 2014 в 17:29