其他几种语言具有'流畅'或链式调用风格的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);
}
}
值得注意的例子包括流畅的nhibernate,jquery方法链接等。这是一种常见的(我会说很受欢迎)api设计模式。
问题:go语法似乎不支持此功能。
您可以在go:
中执行此操作var blah = X().Y().Thing().OtherThing()
......但是这个:
package main
import "n"
func main() {
n.Log(":D")
.Example()
.Example
}
结果:
> command-line-arguments
> ./app.go:7: syntax error: unexpected .
...基本上,因为go会自动插入;在一行的末尾。
任何人都知道有没有办法解决这个问题?
你可以禁用自动;不知何故在一个街区?
或者这种api是不可能的?
答案 0 :(得分:13)
您可以将代码重新格式化为
func main() {
n.Log(":D").
Example().
Example
}
将句点放在行的末尾可以避免自动分号插入 - 只会在标识符,文字或关闭parens / braces后发生。
答案 1 :(得分:-2)
看看goproxy。我认为它的某些部分是流利的。
proxy.OnRequest(goproxy.DstHostIs("www.reddit.com")).DoFunc(
func(r *http.Request,ctx *goproxy.ProxyCtx)(*http.Request,*http.Response) {
if h,_,_ := time.Now().Clock(); h >= 8 && h <= 17 {
return r,goproxy.NewResponse(r,
goproxy.ContentTypeText,http.StatusForbidden,
"Don't waste your time!")
}
return r,nil
})