我正在编写输出其他Go代码的Go代码.
我想知道是否有办法调用gofmt工具来格式化我写完的代码中编写的代码.
我在gofmt上找到的文档,例如官方文档,都涉及如何从命令行使用gofmt,但我想从Go代码本身调用它.
例:
func WriteToFile(content string) {
file, err := os.Create("../output/myFile.go")
if err != nil {
log.Fatal("Cannot create file", err)
}
defer file.Close()
fmt.Fprint(file, content)
//Insert code to call gofmt to automatically format myFile.go here
}
Run Code Online (Sandbox Code Playgroud)
提前感谢您的时间和智慧.
我想我的gofmt作品不是它应该如何,我是对的吗?
原始档案:
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
Run Code Online (Sandbox Code Playgroud)
然后我做了:
gofmt -r 'h -> H' -w "hello.go"
Run Code Online (Sandbox Code Playgroud)
文件内容:
package H
import "fmt"
func H() {
H
}
Run Code Online (Sandbox Code Playgroud) gofmt命令支持 -r 标志以在格式化代码期间使用重写规则。如何用它来用空格缩进代替制表符缩进?
gofmt命令不格式化花括号({}).
码:
package main
import "fmt"
func main()
{
fmt.Printf("Hello, world\n")
}
Run Code Online (Sandbox Code Playgroud)
输出gofmt hello.go
hello.go:6:1:预期声明,找到'{'退出状态2
如果我把空间放在任何地方它正确地格式化它.gofmt不会格式化大括号吗?
Go的主要主题专家之一Dave Cheney写道:"在使用复合文字初始化变量时,Go要求复合文字的每一行以逗号结尾,即使是声明的最后一行.这是分号规则的结果."
但是,当我尝试将这个漂亮的规则应用于JSON文本时,解析器似乎不同意这种理念.在下面的代码中,删除逗号是有效的.有没有解决这个问题,所以当我在差异中添加元素时,我可以看到一行更改?
package main
import (
"fmt"
"encoding/json"
)
type jsonobject struct {
Objects []ObjectType `json:"objects"`
}
type ObjectType struct {
Name string `json:"name"`
}
func main() {
bytes := []byte(`{ "objects":
[
{"name": "foo"}, // REMOVE THE COMMA TO MAKE THE CODE WORK!
]}`)
jsontype := &jsonobject{}
json.Unmarshal(bytes, &jsontype)
fmt.Printf("Results: %v\n", jsontype.Objects[0].Name) // panic: runtime error: index out of range
}
Run Code Online (Sandbox Code Playgroud) 我无法使用 fmt.Println() 扩展变量。
package main
import "fmt"
func main(){
old := 20
fmt.Println("I'm %g years old.",old)
}
Run Code Online (Sandbox Code Playgroud)
结果=>
I'm %g years old.
20
Run Code Online (Sandbox Code Playgroud) 我喜欢gofmtGo编程中的角色。但是,我们希望以下内容:
func somefunc(
a *sometype, // Explanation of a
b int, // Explanation of b
longName float64, // Explanation of longName
) {
...
Run Code Online (Sandbox Code Playgroud)
能够被格式化为:
func somefunc(
a *sometype, // Explanation of a
b int, // Explanation of b
longName float64, // Explanation of longName
) {
...
Run Code Online (Sandbox Code Playgroud)
类似于结构的格式,并符合我们针对其他语言的编码标准。是否有任何适应这些地方偏爱的规定,或者这“不是我们在这里做事的方式”吗?我找不到对使用的模式的任何访问权限gofmt,所以我的猜测是“否”。