6

他のいくつかの言語には、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 は go では不可能ですか?

4

2 に答える 2

-3

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
})
于 2013-04-21T13:40:19.080 に答える