|
来自 Python,我不习惯看到代码行超过 80 列。所以当我遇到这个问题时:
0 p9 L. [5 F4 S0 O7 ]err := database.QueryRow("select * from users where user_id=?",id).Scan(&ReadUser.ID,&ReadUser.Name,&ReadUser.First,&ReadUser.Last,&ReadUser.Email)
- r; `8 g+ N1 B. Q8 B 我试图打破它
- H+ x- A* u1 D. {) g8 l! ferr := database.QueryRow("select * from users where user_id=?",id) \ .Scan(&ReadUser.ID,&ReadUser.Name,&ReadUser.First,&ReadUser.Last,&ReadUser.Email)$ ~+ F3 U6 [" V/ V9 m1 |
但我得到0 C8 F' E$ `+ z, T
syntax error: unexpected \9 i X. N$ k/ H& a0 n4 S
我还试图通过按键打破行,最后放一个分号:
. a7 `! M3 X4 V% C0 r. w, Kerr := database.QueryRow("select * from users where user_id=?",id) .Scan(&ReadUser.ID,&ReadUser.Name,&ReadUser.First,&ReadUser.Last,&ReadUser.Email);& [8 B. q9 {4 n* B" @
但我又得到了:
* J7 d% c) c- }syntax error: unexpected .
# }$ m c7 k2 c/ @. N 所以我想知道 golangic 的方法是什么?
9 B2 S& s# _; t
/ F! v! K' n! a4 ]4 C* H 解决方案: / z, c0 S. k0 u- j# Z% Y
首先介绍背景。Go 正式语法";"分号用作许多生产公式的终止符,但 Go 程序可能会省略大部分(而且应该有更清晰易读的源代码;gofmt删除不必要的分号)。
' r. r1 ^+ J4 a/ B5 A; ~规范中列出了确切的规则。规格:分号:
1 }7 n. ]4 @- u9 p1 r$ X$ |. Q作为许多作品的终结者, 作为许多作品的终结者。Go 程序可以使用以下两个规则来省略大部分分号:
, Y; O" E! P7 n2 n; `[ol]当输入分解为标记时,如果标记是7 O9 j2 y- b( B
一个标识符
) L" S; |5 T9 I6 s t( M6 I: c一个整数,浮点,假想,符文,或串文字& l% y( W6 K' m. y3 i$ p4 X
关键词 break,continue,fallthrough,或者return
" o/ N" Z/ R+ f5 M: D* o一个操作员和分隔符,),- ,
8 x: @0 H1 J: c, T2 ?/ U在结束)或}之前,为了让复杂的句子占据一行,可以省略分号。[/ol]因此,正如你所看到的,如果在括号后插入换行符),;自动插入分号,因此下一行不会被视为上一行的延续。这就是你的情况,所以从 开始.Scan(&ReadUser.ID,...因为这会给你一个编译错误本身(没有前一行)是编译错误:syntax error: unexpected .
* w: i! y. P, C3 c- `0 v所以你可以在不和1之间.上述规则冲突的任何点断线。/ Q0 R& b+ h# h" x! A& q
通常,你可以在逗号后,*开*括号后(如(,.可能引用某个值的字段或方法的点之后换行。您还可以在二元运算符(需要 2 个操作数的运算符)之后换行,例如:9 ~& j3 m1 o4 j L- |
i := 222 fmt.Println(i) // Prints 3; w* z' F R4 U
这里值得注意的一件事是,如果你有 struct 或 slice 或 map 文本列出初始值,你想在列出最后一个值后改变职业,即使这是最后一个值,也不会有更多的跟随,例如:
! [$ ?# r+ }* i, g2 } Ds := []int 1、2、3、 4、5、6、 / Note it ends with a comma}' w2 ?; T- v P8 i$ h& C
这是为了满足分号规则,让你可以在不注意添加/删除最后一个逗号的情况下重新排列和添加新行;例如,您可以简单地交换 2 线,而无需删除和添加新的逗号:
9 J( ]9 m( S+ n( U% {! z' Z% Y4 X# o- J& r
- s := []int 4、5、6、 1、2、3code]这也适用于列出函数调用的参数:[code]fmt.Println("first", "second", "third", / Note it ends with a comma)
2 Q( z, b, L& ~- r |
|