来自 Python,我不习惯看到超过 80 列的代码行。所以当我遇到这个:
err := database.QueryRow("select * from users where user_id=?", id).Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
我试图打破它
err := database.QueryRow("select * from users where user_id=?", id) \
.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
但我明白了
syntax error: unexpected \
我还尝试通过按回车键打破这一行,并在末尾放一个分号:
err := database.QueryRow("select * from users where user_id=?", id)
.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email);
但是我再次得到:
syntax error: unexpected .
所以我想知道这样做的 golangic 方法是什么?
原文由 Karlom 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先是一些背景。 Go 的形式语法在许多产品中使用分号
";"
作为终止符,但 Go 程序可能会省略其中的大部分(并且它们应该有一个更清晰、易于阅读的来源;gofmt
也删除了不必要的分号)。该规范列出了确切的规则。 规范:分号:
因此,如您所见,如果在括号后插入换行符
)
,分号;
将自动插入,因此下一行不会被视为上一行的延续线。这就是你的情况,所以下一行以.Scan(&ReadUser.ID,...
开头会给你一个编译时错误,因为它 _本身_(没有上一行)是一个编译时错误:syntax error: unexpected .
因此,您可以在不与上面
1.
下列出的规则冲突的任何地方断线。Typically you can break your lines after comma
,
, after opening parenthesis eg(
,[
,{
, and after a dot.
可能引用某个字段或某个值的方法。您还可以在二元运算符(需要 2 个操作数的运算符)之后换行,例如:这里值得注意的一件事是,如果你有一个列出初始值的结构或切片或映射文字,并且你想在列出最后一个值后换行,你必须放置一个强制逗号
,
即使这是最后一个值,不会有更多值,例如:这是为了符合分号规则,也让您可以重新排列和添加新行,而不必注意添加/删除最后的逗号;例如,您可以简单地交换 2 行,而不必删除和添加新的逗号:
这同样适用于列出函数调用的参数时: