Расширение оболочки (подстановка команд) в Голанге

Go имеет поддержку расширения переменных, например:

os.ExpandEnv ("test-$ {USER}") `

>> "Тест-MyName"

Но есть ли способ расширения исполняемых файлов, как ведет себя оболочка?

Что-то вроде

os.ExpandExecutable ("test-$ (date +% H:% M)")

>> "Тест-18:20"

Я не могу найти эквивалентный метод для этого, есть ли элегантный способ сделать это вместо того, чтобы вручную извлекать заполнители, выполнять и затем заменять их?

1 ответ

Решение

Для этого нет встроенной функции, но вы можете написать функцию и передать ее os.Expand(),

package main

import (
    "fmt"
    "os"
    "os/exec"
    "strings"
)

func RunProgram(program string) string {
    a := strings.Split(program, " ")
    out, err := exec.Command(a[0], a[1:]...).Output()
    if err != nil {
        panic(err)
    }
    return string(out)
}

// Затем вы называете это как:

func main() {
    s := os.Expand("test-${date +%H:%M}", RunProgram)
    fmt.Print(s)
}

Это выводит:

test-13:09

Обратите внимание, что os.Expand() ожидает фигурные скобки, т.е. ${command args args args},

Другие вопросы по тегам