-2
以下のコードでは、httpレスポンスボディ 'b'を解析してparseGoQueryを解析していますが、これは初めてのことですが、main()で2回目にすると、応答 'b'がfunc parseGoQueryの内側に0と表示されます。私は、変数 'B' のコピーを渡すと思いますが、ポインタではありません、私は混乱しています...goではポインタの代わりに変数のコピーを解析するには?
resp, _ := client.Get(URL)
b :=resp.Body
defer b.Close() // close Body when the function returns
parseGoQuery("tag1", b) //b is not 0 as expected, good
parseGoQuery("tag2", b) //b is 0 !!!???
をアドバイスをしてください。ここparseGoQuery
Response.bodyはタイプio.Readcloserであるfunc parseGoQuery(tag string, b io.Reader) {
fmt.Println(tag,b)
//skipped
}
これは私がやっていることです。ボディからの応答を変数 'b'に格納し、 'b'をfuncに渡します。 – irom
@iromいいえ、これは絶対にあなたが 'b:= resp.Body ':この行は、bが" resp.Body "と同じであると宣言しています。あなたは身体から読んでいないし、"深い "コピーを作っていません。resp.Bodyから複数回読むことはできません。あなたが何をしようとしていても、bから読んだりresp.Bodyから読むかは関係ありません。詳細はGoのツアーをご覧ください。 – Volker