相关疑难解决方法(0)

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

来自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方式是什么?

syntax go

79
推荐指数
4
解决办法
4万
查看次数

是否有可能在go中写出一个"流畅"的风格api?

其他几种语言具有'流畅'或链式调用风格的api,允许你做这样的调用:

public class CatMap : ClassMap<Cat>
{
  public CatMap()
  {
    Id(x => x.Id);
    Map(x => x.Name)
      .Length(16)
      .Not.Nullable();
    Map(x => x.Sex);
    References(x => x.Mate);
    HasMany(x => x.Kittens);
  }
}
Run Code Online (Sandbox Code Playgroud)

值得注意的例子包括流畅的nhibernate,jquery方法链接等.这是一个常见的(我会说很受欢迎)api设计模式.

问题:go语法似乎不支持这一点.

您可以在go中执行此操作:

var blah = X().Y().Thing().OtherThing()
Run Code Online (Sandbox Code Playgroud)

...但是这个:

package main

import "n"

func main() {
    n.Log(":D")
    .Example()
    .Example
}
Run Code Online (Sandbox Code Playgroud)

结果是:

> command-line-arguments
> ./app.go:7: syntax error: unexpected .
Run Code Online (Sandbox Code Playgroud)

...基本上,因为go会自动插入;在一行的末尾.

任何人都知道有没有办法解决这个问题?

你可以禁用自动; 不知怎的?

或者这种api是不可能的?

go

3
推荐指数
1
解决办法
1912
查看次数

标签 统计

go ×2

syntax ×1