来自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方式是什么?
其他几种语言具有'流畅'或链式调用风格的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是不可能的?