0

だから、私はGOを使ってPOSTを解析しています。私が欲しいのは投稿の本文なので、次のことを試します(このコンテキストrではタイプです):*http.Request

var body io.Reader
var d []byte
body = r.Body.Reader
body.Read( d)

ただし、これによりコンパイル エラーが発生します。

Compile error: <file>:44: 
    r.Body.Reader undefined (type io.ReadCloser has no field or method Reader)

奇数。ドキュメントで定義されていると断言できました...ああ!ここにあります。

さて、私は Go にかなり慣れていませんが、これは少し変なにおいがします - 何を間違えたのでしょうか?

4

2 に答える 2

6

リンクから、 a のドキュメントReadCloserは次のとおりです。

type ReadCloser interface {
    Reader
    Closer
}

これは、ReadCloser インターフェイスがReaderCloser機能で構成されていることを示しています。それは両方です。つまりReadCloser、これらのインターフェース定義を引き継ぐということです。それらは実際にはメンバーではなく、アクセスする方法です。

AReaderは:

type Reader interface {
    Read(p []byte) (n int, err error)
}

つまり、次Readのようにアクセスする必要があります。

body = r.Body
body.Read(d)
于 2012-09-07T19:46:34.813 に答える
0

インターフェイスが Go ドキュメントで定義される方法は、「has-a」関係のように見えました。これは実際には「is-a」関係であるため、次のコードは私が望むことを行います:

var d []byte
r.Body.Read(d)
于 2012-09-07T19:47:18.683 に答える