下面的代碼做什么:
它到達給定的 URL 并使用由隨機陣列成的純文本進行回應。此時資料是切片 []byte,但我想使用這些資料,所以我認為最好的解決方案是將資料轉換為切片 []int。
這是我的代碼:
func getRandomInt(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
resp, err := http.Get("https://www.random.org/integers/?num=5&min=1&max=10&col=1&base=10&format=plain&rnd=new")
if err != nil {
fmt.Println("No response from request")
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body) // response body is []byte
if err != nil {
fmt.Println(err)
}
err = json.Unmarshal(body, &bodyInt)
if err != nil {
fmt.Println(err)
}
//MY CONVERTER
bodyInt := make([]int, len(body))
for i, b := range body {
bodyInt[i] = int(b)
}
js, err := json.Marshal(bodyInt)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Write(js)
fmt.Println("Endpoint Hit: getRandomInt")
}
我試圖自己做一些轉換。使用給定的 URL,我應該得到 1 到 10 范圍內的 5 個數字。轉換后我得到的是 10 到 60 范圍內的 10-11 個數字。
我做了一些測驗,當 body 的結構如下所示時,cnversion 作業正常。
body = []byte{1, 2, 3, 4, 5}
所以我想我從 url 回應中以稍微不同的格式讀取資料,但不知道如何解決這個問題。謝謝。
uj5u.com熱心網友回復:
如果您使用curl該 URL,您可以清楚地看到回應不是 JSON,因此您不應如此對待它。
curl 'https://www.random.org/integers/?num=5&min=1&max=10&col=1&base=10&format=plain&rnd=new'
5
10
4
4
2
它只是一個換行符分隔的整數串列,所以你應該這樣對待它。
resp, err := http.Get("https://www.random.org/integers/?num=5&min=1&max=10&col=1&base=10&format=plain&rnd=new")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
lines := strings.Split(string(body), "\n")
numbers := []int{}
for i := range lines {
line := strings.TrimSpace(lines[i])
if line == "" {
continue
}
num, err := strconv.Atoi(line)
if err != nil {
fmt.Println(err)
return
}
numbers = append(numbers, num)
}
// do something with numbers
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385812.html
