gpt4 book ai didi

http - Golang,零指针取消引用或无效内存地址

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:08 27 4
gpt4 key购买 nike

我的代码运行完美,直到我想使用许多并发调用来扩展它。它通过向客户端询问 Get 请求来工作。

这是我得到的:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x400da9]

goroutine 125 [running]:
runtime.panic(0x697480, 0x850d13)
/usr/lib/go/src/pkg/runtime/panic.c:279 +0xf5
main.concurrent(0x25e5)
/home/maker/go/src/GoBot/GoBot.go:19 +0x1a9
created by main.main
/home/maker/go/src/GoBot/GoBot.go:51 +0x224

我认为我没有正确处理错误,当发出大量请求时它崩溃了。

func concurrent(n uint64) {
for i := n; i < n+11; i++ {
member, err := s.GetUser(i)
output <- fmt.Sprint(member.Username) //This is line 19 that triggers the error
if err != nil && member != nil {
continue
}
}
defer wg.Done()
}

我该如何解决这个问题?此处 s.GetUser 的引用资料: https://github.com/njasm/gosoundcloud/blob/master/soundcloud.go#L274

最佳答案

首先,您可以通过检查 GetUser 的返回值来防止 panic 您目前忽略的内容;

        member,  err := s.GetUser(i)
if err != nil {
// handle error
}
if member != nil { // prevents the panic attempting to access Username on nil instance of user/member
output <- fmt.Sprint(member.Username) //This is line 19 that triggers the error
if err != nil && member != nil {
continue
}
}

除此之外,GetUser 是什么?正在做?如果它正在执行 HTTP GET,那么应用程序通常会阻塞直到它返回,这意味着如果您检查错误,很可能会出现 HTTP 404、403、500 等错误。

如果调用GetUser是并发的,那么您可能会遇到以下代码尝试访问 member.Username 的问题之前 GetUser返回导致 nil panic ,但我不知道怎么会发生,因为那里没有 goroutine。它应该只是一个简单的阻塞调用。如果您发现上述建议无法找到问题的根本原因,请使用 GetUser 中的结果编辑您的问题。及其实现,我将进一步研究。

关于http - Golang,零指针取消引用或无效内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37425554/

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