英文:
Go output with ioutil: returning array of (ASCII?) numbers from http call
问题
我正在尝试使用Go编写一个Web客户端,但是当我检查HTTP请求的返回值时,我得到的是一个数字数组,而不是文本。
以下是产生输出的程序的最简化版本。我认为我在使用ioutil
时出了问题,但不知道具体是什么问题。
package main
import "fmt"
import "net/http"
import "io/ioutil"
func main() {
resp, err := http.Get("http://test.com/")
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
fmt.Print(body)
}
输出结果看起来像是:
[239 187 191 60 33 68 79 67 84 89 80 69 32 104 116 109 108 ...
而不是test.com
返回的内容。
英文:
I am trying to write a web client in Go, but when I check the return value of the body of the http request, I get an array of numbers, instead of text.
This is the most isolated version of the program that produces the output. I think I am failing do something with ioutil, but do not know what.
package main
import "fmt"
import "net/http"
import "io/ioutil"
func main() {
resp, err := http.Get("http://test.com/")
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
fmt.Print(body)
}
The output comes out looking like:
[239 187 191 60 33 68 79 67 84 89 80 69 32 104 116 109 108 ...
instead of the test returned by test.com
答案1
得分: 6
ioutil.ReadAll()
返回的是一个字节切片 ([]byte
),而不是一个字符串 (string
)(还有一个错误)。
将其转换为字符串,你就可以使用了:
fmt.Print(string(body))
看下这个简单的例子(在 Go Playground 上试一试):
var b []byte = []byte("Hello")
fmt.Println(b)
fmt.Println(string(b))
输出:
[72 101 108 108 111]
Hello
英文:
ioutil.ReadAll()
returns a byte slice ([]byte
) and not a string
(plus an error
).
Convert it to string
and you're good to go:
fmt.Print(string(body))
See this simple example (try it on Go Playground):
var b []byte = []byte("Hello")
fmt.Println(b)
fmt.Println(string(b))
Output:
[72 101 108 108 111]
Hello
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论