0

go generate 的语法是什么,可以将 stdout 从 go run 传输到 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)
}
4

1 回答 1

4

直接使用格式包而不是运行shell:

//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 这样的 shell,因为 shell 可能并非在运行 Go 工具的所有系统上都可用。

于 2020-03-01T03:32:04.067 回答