サンプルボディストリングを使用してゴールグ内にサンプルhttp.Response
インスタンスを作成します。ゴランのサンプルボディストリングを使用してhttp.Responseインスタンスを作成します。
問題は、本体のプロパティがReadCloser
インスタンスを受け入れることです。しかし、ダミーのレスポンスのインスタンスとして、ストリームの読み込み/終了の部分をすべて設定せずに簡単に設定できるトリックがあるかどうかは疑問でした。
サンプルボディストリングを使用してゴールグ内にサンプルhttp.Response
インスタンスを作成します。ゴランのサンプルボディストリングを使用してhttp.Responseインスタンスを作成します。
問題は、本体のプロパティがReadCloser
インスタンスを受け入れることです。しかし、ダミーのレスポンスのインスタンスとして、ストリームの読み込み/終了の部分をすべて設定せずに簡単に設定できるトリックがあるかどうかは疑問でした。
Not_a_GolferとJimBによって示唆されるように:
io.ReadCloser
struct
はRead
とClose
機能の両方を実装する際に満たされているインターフェースです。
幸い、io.Reader
を取り、Read
とClose
の両方を実装nopCloser
構造体、それをラップしioutil.NopCloser
は、そこにあります。ただし、そのClose
関数はnothingという名前から暗示されています。
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
t := http.Response{
Body: ioutil.NopCloser(bytes.NewBufferString("Hello World")),
}
buff := bytes.NewBuffer(nil)
t.Write(buff)
fmt.Println(buff)
}
コードを再生するには、hereをクリックしてください:ここで
は一例です。これはトップの答えにさらに..
func main(){
go serveHTTP(*port, *host)
select {}
}
func serveHTTP(port int, host string) {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
requestHandler(w, r)
})
addr := fmt.Sprintf("%v:%d", host, port)
server := &http.Server {
Addr: addr,
Handler: mux,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
err := server.ListenAndServe()
log.Println(err.Error())
}
func requestHandler(w http.ResponseWriter, r *http.Request){
fmt.Fprintf(w, `Success!`)
}
を動作するはずです、私はクライアントが本物として扱われることに応答ためには、それがより完全に形成する必要があることを発見しました。ノーマル(200)応答のために、私は次のようにします。
body := "Hello world"
t := &http.Response{
Status: "200 OK",
StatusCode: 200,
Proto: "HTTP/1.1",
ProtoMajor: 1,
ProtoMinor: 1,
Body: ioutil.NopCloser(bytes.NewBufferString(body)),
ContentLength: int64(len(body)),
Request: req,
Header: make(http.Header, 0),
}
を次にあなたは、例えば、ヘッダを追加することができます(承認を求めるために、401のステータスコードで、と言います)。 req
は、応答を生成するhttp.Request
です。
単純な文字列リーダなどをダミーの 'Close'メソッドで拡張することができます。 –
これはあなたのために行われます:[ioutiil.NopCloser](https://golang.org/pkg/io/ioutil/#NopCloser) – JimB