go генерировать стандартный поток, передаваемый в gofmt в файл - PullRequest
0 голосов
/ 01 марта 2020

Каков синтаксис, который go генерирует, может ли стандартный поток вывода из go запускать в gofmt и, в конечном итоге, в файл? Ниже приведен простой пример того, что я пробовал. Это в файле main.go. Я не могу найти примеры этого после поиска. Спасибо.

Редактировать: в конечном итоге я хотел бы использовать go generate и попросить его написать отформатированный файл.

//go:generate go run main.go | go fmt > foo.go
package main

import "fmt"

const content = `
package main
func     foo() string {return "Foo"}
`

func main() {
    fmt.Print(content)
}

1 Ответ

2 голосов
/ 01 марта 2020

Используйте пакет формата напрямую вместо запуска оболочки:

//go:generate go run main.go
package main

import (
    "go/format"
    "io/ioutil"
    "log"
)

const content = `
package main
func     foo() string {return "Foo"}
`

func main() {
    formattedContent, err := format.Source([]byte(content))
    if err != nil {
        log.Fatal(err)
    }
    err = ioutil.WriteFile("foo.go", formattedContent, 0666)
    if err != nil {
        log.Fatal(err)
    }
}

Избегайте использования оболочки типа bash, поскольку оболочка может быть недоступна во всех системах, где Go инструментов работают.

...