Необходимо осуществить запрос к нескольким страницам через multi_curl, после чего обработать полученные данные в функции. Есть код (пример):
package main
import (
"fmt"
"time"
curl "github.com/golang-basic/go-curl"
)
func callback(ptr []byte, userdata interface{}) bool {
fmt.Printf("Size: %v\n", len(ptr))
return true
}
func main() {
mc := curl.MultiInit()
url := []string{
"http://api.sypexgeo.net/json/12.34.56.78",
"http://api.sypexgeo.net/json/123.45.67.89",
}
for _, u := range url {
easy := curl.EasyInit()
easy.Setopt(curl.OPT_URL, u)
easy.Setopt(curl.OPT_FOLLOWLOCATION, 1)
easy.Setopt(curl.OPT_WRITEFUNCTION, callback)
mc.AddHandle(easy)
}
defer mc.Cleanup()
for {
nRunning, _ := mc.Perform()
if nRunning == 0 {
fmt.Println("exit")
break
}
time.Sleep(time.Millisecond * 100)
}
}
При его выполнении через раз возникает ошибка:
unexpected fault address 0xc20803a038
fatal error: fault
[signal 0xb code=0x2 addr=0xc20803a038 pc=0xc20803a038]
goroutine 16 [running]:
runtime.throw(0x7846a2)
/usr/lib/go/src/pkg/runtime/panic.c:520 +0x69 fp=0x7f748a417f00 sp=0x7f748a417ee8
runtime: unexpected return pc for runtime.sigpanic called from 0xc20803a038
runtime.sigpanic()
/usr/lib/go/src/pkg/runtime/os_linux.c:240 +0x13f fp=0x7f748a417f18 sp=0x7f748a417f00
created by _rt0_go
/usr/lib/go/src/pkg/runtime/asm_amd64.s:97 +0x120
goroutine 19 [finalizer wait]:
runtime.park(0x4160e0, 0x793518, 0x787189)
/usr/lib/go/src/pkg/runtime/proc.c:1369 +0x89
runtime.parkunlock(0x793518, 0x787189)
/usr/lib/go/src/pkg/runtime/proc.c:1385 +0x3b
runfinq()
/usr/lib/go/src/pkg/runtime/mgc0.c:2644 +0xcf
runtime.goexit()
/usr/lib/go/src/pkg/runtime/proc.c:1445
goroutine 17 [syscall]:
runtime.goexit()
/usr/lib/go/src/pkg/runtime/proc.c:1445
exit status 2
В чем может быть ошибка?
P.S> К сожалению стандартный net/http не подходит в силу некоторых особенностей задачи.