gpt4 book ai didi

调用 http.Get 时 golang panic

转载 作者:IT王子 更新时间:2023-10-29 01:27:07 24 4
gpt4 key购买 nike

错误信息:

goroutine 11357 [runnable]:
net.runtime_pollWait(0x1737f28, 0x77, 0x4fa90)
/usr/local/go/src/runtime/netpoll.go:157 +0x60
net.(*pollDesc).Wait(0xc829571bf0, 0x77, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x3a
net.(*pollDesc).WaitWrite(0xc829571bf0, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:82 +0x36
net.(*netFD).connect(0xc829571b90, 0x0, 0x0, 0x1714f80, 0xc829572f20, 0xece412272, 0x33aa2325, 0x473ea0, 0x0, 0x0)
/usr/local/go/src/net/fd_unix.go:114 +0x1f6
net.(*netFD).dial(0xc829571b90, 0x1714f38, 0x0, 0x1714f38, 0xc8295755c0, 0xece412272, 0x33aa2325, 0x473ea0, 0x0, 0x0)
/usr/local/go/src/net/sock_posix.go:137 +0x351
net.socket(0x3050e8, 0x3, 0x2, 0x1, 0x0, 0xc829575500, 0x1714f38, 0x0, 0x1714f38, 0xc8295755c0, ...)
/usr/local/go/src/net/sock_posix.go:89 +0x411
net.internetSocket(0x3050e8, 0x3, 0x1714f38, 0x0, 0x1714f38, 0xc8295755c0, 0xece412272, 0xc833aa2325, 0x473ea0, 0x1, ...)
/usr/local/go/src/net/ipsock_posix.go:160 +0x141
net.dialTCP(0x3050e8, 0x3, 0x0, 0xc8295755c0, 0xece412272, 0xc833aa2325, 0x473ea0, 0x2, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:171 +0x11e
net.dialSingle(0xc829580b80, 0x1714ea8, 0xc8295755c0, 0xece412272, 0x33aa2325, 0x473ea0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/dial.go:364 +0x3f5
net.dialSerial.func1(0xece412272, 0x33aa2325, 0x473ea0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/dial.go:336 +0x75
net.dial(0x3050e8, 0x3, 0x1714ea8, 0xc8295755c0, 0xc8232f96e8, 0xece412272, 0x33aa2325, 0x473ea0, 0x0, 0x0, ...)
/usr/local/go/src/net/fd_unix.go:40 +0x60
net.dialSerial(0xc829580b80, 0xc829572f00, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/dial.go:338 +0x760
net.(*Dialer).Dial(0xc8200783c0, 0x3050e8, 0x3, 0xc823166ed0, 0x10, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/dial.go:232 +0x50f
net.(*Dialer).Dial-fm(0x3050e8, 0x3, 0xc823166ed0, 0x10, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:38 +0x6e
net/http.(*Transport).dial(0xc820092090, 0x3050e8, 0x3, 0xc823166ed0, 0x10, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:499 +0x79
net/http.(*Transport).dialConn(0xc820092090, 0x0, 0x7fff5fbff92a, 0x4, 0xc823166ed0, 0x10, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:596 +0x19a9
net/http.(*Transport).getConn.func4(0xc820092090, 0x0, 0x7fff5fbff92a, 0x4, 0xc823166ed0, 0x10, 0xc8232a9560)
/usr/local/go/src/net/http/transport.go:549 +0x66
created by net/http.(*Transport).getConn
/usr/local/go/src/net/http/transport.go:551 +0x265

来源

package main

import (
"fmt"
"io/ioutil"
"net/http"
"os"
"strconv"
"time"
)

func golanggo(url string, round int, c chan int64) {
for i := 0; i < round; i++ {
call(url, c)
}
}

func call(url string, c chan int64) {
eslap := int64(0)
defer func() {
c <- eslap
//fmt.Println("put", eslap)
// if err := recover(); err != nil {
// fmt.Println(err)
// }
}()
now := time.Now()
resp, err := http.Get(url)
defer resp.Body.Close()
if err != nil {
fmt.Println("err:", err)
return
}
if resp.StatusCode == 200 {
ioutil.ReadAll(resp.Body)
//fmt.Println(string(data[:]))
}
eslap = time.Now().Sub(now).Nanoseconds()
}

func main() {
url := os.Args[1]
size, _ := strconv.Atoi(os.Args[2])
round, _ := strconv.Atoi(os.Args[3])
c := make(chan int64)

for i := 0; i < size; i++ {
go golanggo(url, round, c)
}

var total int64 = 0

var nanos int64
for i := 0; i < (size * round); i++ {
//fmt.Print(i)
nanos = <-c
//fmt.Println(i, "get", nanos)
total += nanos
}

fmt.Println(total / 1000000)
}

当 exec go 运行 client.go http://www.baidu.com 10000 1,几秒钟后程序崩溃。当 exec go 运行 client.go http://www.baidu.com 100 1,没关系。

多少goroutine会导致这个错误?

请帮帮我!谢谢。

最佳答案

resp, err := http.Get(url)
defer resp.Body.Close()
if err != nil {
fmt.Println("err:", err)
return
}

如果 err!= nil,则 resp==nil,因此会因 nil 指针取消引用而崩溃。修复您的代码:

resp, err := http.Get(url)
if err != nil {
fmt.Println("err:", err)
return
}
defer resp.Body.Close()

关于调用 http.Get 时 golang panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35128427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com