来自Python,我不习惯看到超过80列的代码行.所以当我遇到这个时:
err := database.QueryRow("select * from users where user_id=?", id).Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
Run Code Online (Sandbox Code Playgroud)
我试图打破它
err := database.QueryRow("select * from users where user_id=?", id) \
.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
Run Code Online (Sandbox Code Playgroud)
但我明白了
syntax error: unexpected \
Run Code Online (Sandbox Code Playgroud)
我也试过打破输入并在结尾处添加分号:
err := database.QueryRow("select * from users where user_id=?", id)
.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email);
Run Code Online (Sandbox Code Playgroud)
但我再次得到:
syntax error: unexpected .
Run Code Online (Sandbox Code Playgroud)
所以我想知道这样做的golangic方式是什么?
icz*_*cza 94
首先是一些背景.Go的形式语法";"在许多作品中使用分号作为终结符,但Go程序可能会省略其中的大多数(并且它们应该具有更清晰,易读的源; gofmt还可以删除不必要的分号).
规范列出了确切的规则.规格:分号:
形式语法使用分号";" 作为许多作品的终结者.Go程序可以使用以下两个规则省略大多数这些分号:
因此,您可以看到在括号后插入换行符),;将自动插入分号,因此下一行不会被视为上一行的延续.这是你的情况下发生的事情,因此下一行开头.Scan(&ReadUser.ID,...将给你一个编译时错误,因为它自己(没有前一行)是一个编译时错误:syntax error: unexpected .
所以你可能会在任何与1.上面列出的规则不冲突的地方打破你的界限.
通常,您可以逗号后打破你的线,,之后打开括号例如(,[,{,和点之后.可以参考一些值的字段或方法.您也可以在二元运算符(需要2个操作数的运算符)之后断行,例如:
i := 1 +
2
fmt.Println(i) // Prints 3
Run Code Online (Sandbox Code Playgroud)
这里值得注意的一件事是,如果你有一个结构或切片或地图文字列出初始值,并且你想在列出最后一个值后断行,你必须输入一个强制逗号,,即使这是最后一个值而不是更多将遵循,例如:
s := []int {
1, 2, 3,
4, 5, 6, // Note it ends with a comma
}
Run Code Online (Sandbox Code Playgroud)
这是为了符合分号规则,以便您可以重新排列和添加新行,而无需添加/删除最后一个逗号; 例如,您只需交换2行而无需删除并添加新逗号:
s := []int {
4, 5, 6,
1, 2, 3,
}
Run Code Online (Sandbox Code Playgroud)
列出函数调用的参数时也是如此:
fmt.Println("first",
"second",
"third", // Note it ends with a comma
)
Run Code Online (Sandbox Code Playgroud)
tob*_*ies 15
最简单的方法是简单地将operator(.)留在第一行.
\ 在许多python样式指南中也不鼓励使用行继续,如果你在go和python之间来回移动,你可以将整个表达式包装在parens中,因为这种技术适用于两种语言.
pet*_*rSO 13
这是一个风格问题,但我喜欢:
err := database.QueryRow(
"select * from users where user_id=?", id,
).Scan(
&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email,
)
Run Code Online (Sandbox Code Playgroud)
hal*_*ium 12
如上所述,这是风格偏好的问题.据我所知,Go的创作者根据我的经验建议了一种风格,但也从我的经验中保留了一些自己的风格.
以下是我将如何格式化:
err := database.
QueryRow("select * from users where user_id=?", id).
Scan(
&ReadUser.ID,
&ReadUser.Name,
&ReadUser.First,
&ReadUser.Last,
&ReadUser.Email,
)
Run Code Online (Sandbox Code Playgroud)