多くの同時呼び出しを使用してスケーリングするまで、私のコードは完全に機能します。これは、クライアントにGetリクエストを要求することによって機能します。Golang、ポインタの参照が無効であるか無効なメモリアドレス
は、これは私が取得していますものです:
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'から返されたエラーがあっても、19行目で' member'を使っています。並行処理に関連しているようには思えません。おそらく、あなたの並行バージョンが 'GetUser'をより多く呼び出すからです。 –