回答

收藏

如何在 Golang 中打破一长行代码?

技术问答 技术问答 481 人阅读 | 0 人回复 | 2023-09-12

来自 Python,我不习惯看到代码行超过 80 列。所以当我遇到这个问题时:8 b7 i( r" P: O( C5 \1 ^5 ?
    err := database.QueryRow("select * from users where user_id=?",id).Scan(&ReadUser.ID,&ReadUser.Name,&ReadUser.First,&ReadUser.Last,&ReadUser.Email)
    + D9 e+ l+ ?2 w- y
我试图打破它
! e8 k/ }+ d. }. y! P- o
    err := database.QueryRow("select * from users where user_id=?",id) \    .Scan(&ReadUser.ID,&ReadUser.Name,&ReadUser.First,&ReadUser.Last,&ReadUser.Email)5 k1 b0 V/ P+ N4 L! ?  d" m' m) p
但我得到; k2 m; r# `% G% G$ [6 f+ z
    syntax error: unexpected \
    - p+ d% Q- m0 f2 `
我还试图通过按键打破行,最后放一个分号:
  O! e, s$ |. F/ V
    err := database.QueryRow("select * from users where user_id=?",id) .Scan(&ReadUser.ID,&ReadUser.Name,&ReadUser.First,&ReadUser.Last,&ReadUser.Email);1 C2 _* J3 X! B7 d1 x
但我又得到了:0 W- Q: B+ |% Y  p0 c: ^
    syntax error: unexpected .
    - k  V- ]- X9 b% z1 X: {- i8 L( {
所以我想知道 golangic 的方法是什么?
9 @" B; Y& }, G7 q                                                               
3 W1 G# x0 T: |4 S( y    解决方案:                                                               
) @4 s" x( W( l0 l* T                                                                首先介绍背景。Go 正式语法";"分号用作许多生产公式的终止符,但 Go 程序可能会省略大部分(而且应该有更清晰易读的源代码;gofmt删除不必要的分号)。3 m! c1 e( ~, z8 x& @& i+ _
规范中列出了确切的规则。规格:分号:
: \/ N8 g; z" e. p  Z+ A) f  X; [作为许多作品的终结者, 作为许多作品的终结者。Go 程序可以使用以下两个规则来省略大部分分号:
3 ]# A: }3 \  t2 Z/ c[ol]当输入分解为标记时,如果标记是
' @9 y9 z: p2 |% K8 g一个标识符- I- n. c- x' r6 J7 Q$ x: a4 v
一个整数,浮点,假想,符文,或串文字
8 u) W* D; r% M$ W: ]% o关键词 break,continue,fallthrough,或者return2 w2 F3 d7 F3 c+ t' b) i/ q: Z0 t
一个操作员和分隔符,),-   ,- z  G& V) E- }8 J. e0 U9 J  p& R2 ~
在结束)或}之前,为了让复杂的句子占据一行,可以省略分号。[/ol]因此,正如你所看到的,如果在括号后插入换行符),;自动插入分号,因此下一行不会被视为上一行的延续。这就是你的情况,所以从 开始.Scan(&ReadUser.ID,...因为这会给你一个编译错误本身(没有前一行)是编译错误:syntax error: unexpected ., H& k4 R! R5 B- O( p
所以你可以在不和1之间.上述规则冲突的任何点断线。
2 n, f. ?8 C& E. O2 P通常,你可以在逗号后,*开*括号后(如(,.可能引用某个值的字段或方法的点之后换行。您还可以在二元运算符(需要 2 个操作数的运算符)之后换行,例如:) o+ \9 P' X0 T) X
    i :=              222                                 fmt.Println(i) // Prints 3
      M8 z" L9 d( f1 \
这里值得注意的一件事是,如果你有 struct 或 slice 或 map 文本列出初始值,你想在列出最后一个值后改变职业,即使这是最后一个值,也不会有更多的跟随,例如:
4 Y* V9 f2 r+ w9 h3 i
    s := []int       1、2、3、 4、5、6、 / Note it ends with a comma}' w& N& _. K' t/ a
这是为了满足分号规则,让你可以在不注意添加/删除最后一个逗号的情况下重新排列和添加新行;例如,您可以简单地交换 2 线,而无需删除和添加新的逗号:
# P4 Z4 d6 \' C% Z- P

    3 U9 P% v9 a# g6 p5 ~4 b
  • s := []int      4、5、6、  1、2、3code]这也适用于列出函数调用的参数:[code]fmt.Println("first",   "second",   "third",      / Note it ends with a comma)+ y4 }7 B& Y7 w1 y) J+ f8 q
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则