Go Ask Question で HTTP レスポンスを文字列としてアクセスする

Go Ask Question で HTTP レスポンスを文字列としてアクセスする

Web リクエストの応答を解析したいのですが、文字列としてアクセスする際に問題が発生します。

func main() {
    resp, err := http.Get("http://google.hu/")
    if err != nil {
        // handle error
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)

    ioutil.WriteFile("dump", body, 0600)

    for i:= 0; i < len(body); i++ {
        fmt.Println( body[i] ) // This logs uint8 and prints numbers
    }

    fmt.Println( reflect.TypeOf(body) )
    fmt.Println("done")
}

応答に文字列としてアクセスするにはどうすればいいですか?ioutil.WriteFile応答をファイルに正しく書き込みます。

パッケージリファレンスはすでに確認しましたが、あまり役に立ちませんでした。

ベストアンサー1

bs := string(body)文字列を取得するには十分なはずです。

そこから、通常の文字列として使用できます。

このスレッドと少し似ています
( Go 1.16 -- Q1 2021 --ioutil非推奨後に更新: ioutil.ReadAll()=> io.ReadAll()):

var client http.Client
resp, err := client.Get(url)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

if resp.StatusCode == http.StatusOK {
    bodyBytes, err := io.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    bodyString := string(bodyBytes)
    log.Info(bodyString)
}

GoByExampleも参照してください。

以下にコメントされているように(およびzzn回答)、これは変換です(仕様を参照)。zzzz
言及している「はどれくらい高価ですか[]byte(string)」(逆の問題ですが、同じ結論が適用されます)を参照してください。

一部の変換はキャストと同じで、 のようにuint(myIntvar)ビットをその場で再解釈するだけです。

ソニアはこう付け加えた。

バイト スライスから文字列を作成するには、必ずヒープ上に文字列を割り当てる必要があります。不変性により、この処理が強制されます。
場合によっては、[]byte で可能な限り多くの作業を行い、最後に文字列を作成することで最適化できます。このbytes.Buffer型は多くの場合便利です。

おすすめ記事