|
来自 Python,我不习惯看到代码行超过 80 列。所以当我遇到这个问题时:
) Y; Z( Q" l/ a5 U* r2 C6 E# |err := database.QueryRow("select * from users where user_id=?",id).Scan(&ReadUser.ID,&ReadUser.Name,&ReadUser.First,&ReadUser.Last,&ReadUser.Email)
4 ?- e# n" C. C$ g4 v 我试图打破它
: z" S+ S5 Z. s! L$ ^; q! ?err := database.QueryRow("select * from users where user_id=?",id) \ .Scan(&ReadUser.ID,&ReadUser.Name,&ReadUser.First,&ReadUser.Last,&ReadUser.Email)5 h5 Z6 t, F0 ^+ J# x
但我得到6 X* B' Y! V/ J8 v5 ]0 p, U
syntax error: unexpected \$ ^* y9 ` G& [8 l
我还试图通过按键打破行,最后放一个分号: A. E3 z4 q+ E! A+ d P
err := database.QueryRow("select * from users where user_id=?",id) .Scan(&ReadUser.ID,&ReadUser.Name,&ReadUser.First,&ReadUser.Last,&ReadUser.Email);( g/ P. d3 e) W/ P; s
但我又得到了:. ]: p6 u e; L6 `: _
syntax error: unexpected .# ~* x% S3 I7 y0 _6 `: b
所以我想知道 golangic 的方法是什么?
) G( M% N" u" s- p! u 6 [3 W5 D2 R* c! O+ W
解决方案: 1 G" s; w9 ~* |
首先介绍背景。Go 正式语法";"分号用作许多生产公式的终止符,但 Go 程序可能会省略大部分(而且应该有更清晰易读的源代码;gofmt删除不必要的分号)。
7 m! G$ M+ }# r9 F规范中列出了确切的规则。规格:分号:0 x. N A9 L9 P
作为许多作品的终结者, 作为许多作品的终结者。Go 程序可以使用以下两个规则来省略大部分分号:2 L& ?2 P; G1 L" j) ?. k) l9 |
[ol]当输入分解为标记时,如果标记是* I$ ` m0 z4 Q( f5 J* r2 i
一个标识符6 c* p3 K- ]6 q$ L8 e6 Y! m7 \" t
一个整数,浮点,假想,符文,或串文字) s8 {9 Q J- O% U9 u
关键词 break,continue,fallthrough,或者return7 C& |9 m* Q7 N$ w5 a
一个操作员和分隔符,),- ,( S, y& s7 n- ~7 x2 C
在结束)或}之前,为了让复杂的句子占据一行,可以省略分号。[/ol]因此,正如你所看到的,如果在括号后插入换行符),;自动插入分号,因此下一行不会被视为上一行的延续。这就是你的情况,所以从 开始.Scan(&ReadUser.ID,...因为这会给你一个编译错误本身(没有前一行)是编译错误:syntax error: unexpected .! C0 r. [6 I q# D' Q
所以你可以在不和1之间.上述规则冲突的任何点断线。
4 A: x2 f* n- F通常,你可以在逗号后,*开*括号后(如(,.可能引用某个值的字段或方法的点之后换行。您还可以在二元运算符(需要 2 个操作数的运算符)之后换行,例如:4 ~4 w7 G9 ^ Q R. F
i := 222 fmt.Println(i) // Prints 3" { t- ^. A, z+ u- Y# A, U1 P
这里值得注意的一件事是,如果你有 struct 或 slice 或 map 文本列出初始值,你想在列出最后一个值后改变职业,即使这是最后一个值,也不会有更多的跟随,例如:
* {- Z% C: o" V7 Q' Rs := []int 1、2、3、 4、5、6、 / Note it ends with a comma}' S* F3 ?0 Y! A; a* N$ I; S/ a
这是为了满足分号规则,让你可以在不注意添加/删除最后一个逗号的情况下重新排列和添加新行;例如,您可以简单地交换 2 线,而无需删除和添加新的逗号:# b' G( R7 N0 b9 O; E9 I
, i- n6 w* w$ f, ]' l& Z/ ^7 a& H" T
- s := []int 4、5、6、 1、2、3code]这也适用于列出函数调用的参数:[code]fmt.Println("first", "second", "third", / Note it ends with a comma)
# \4 \% [1 Z* @. ~; g |
|