草庐IT

handle_asynchronously

全部标签

error-handling - 在 Go 中处理连接重置错误

在普通的GoHTTP处理程序上,如果我断开客户端连接同时仍在写入响应,http.ResponseWritter.Write将返回一个错误消息,如writetcp127.0.0.1:60702:连接被对等方重置。现在从syscall包中,我有sysca.ECONNRESET,它有消息connectionresetbypeer,所以它们不是完全一样。我怎样才能匹配它们,所以我知道如果它发生了不要panic?在其他场合我一直在做iferr==syscall.EAGAIN{/*handleerrordifferently*/}例如,它运行良好,但我无法使用syscall.ECONNRESET实

asynchronous - 当我在 goroutine 中运行 wg.Wait() 时,为什么我的代码可以正常工作?

我有一个要抓取的网址列表。我想做的是将所有成功抓取的页面数据存储到一个channel中,当我完成后,将其转储到一个slice中。我不知道我会得到多少成功的抓取,所以我不能指定一个固定的长度。我希望代码到达wg.Wait()然后等到所有wg.Done()方法被调用,但我从未到达close(队列)语句。寻找类似的答案,我遇到了这个SOanswerhttps://stackoverflow.com/a/31573574/5721702作者做了类似的事情:ports:=make(chanstring)toScan:=make(chanint)varwgsync.WaitGroup//make1

websocket - http.Handle ("/", websocket.Handler(EchoServer) EchoServer 可以获取ws以外的其他参数吗?

我已经打开了一个websocket服务器来向web组件发送数据,funcWebSocketServer(){http.Handle("/",websocket.Handler(Echoserver))err:=http.ListenAndServe(":8081",nil)CheckError(err)}我想将一个额外的参数(msg,字符串类型)传递给处理函数(Echoserver)。funcEchoserver(ws*websocket.Conn,msgString){fmt.Println("ClientConnected")_:=websocket.JSON.Send(ws,ms

error-handling - Go 中的自定义错误处理

我一直在阅读thisblogpost但我仍然不相信我确切地知道该怎么做才能获得我可以从我的函数返回并在它们之外处理的自定义错误。这是我目前正在做的:funcdoSomething()int{x:=0//Dosomethingwithx....ifsomethingBadHappened{return-1}ifsomethingElseBadHappened{return-2}returnx}这就是我想做的:funcdoSomething()int,?{...ifsomethingBadHappened{return?,err}ifsomethingElseBadHappened{ret

http.Handle(Handler 或 HandlerFunc)

下面的功能是如何实现的?funchandle(patternstring,handlerinterface{}){//...whatgoeshere?...http.Handle(pattern,?)}handle("/foo",func(whttp.ResponseWriter,rhttp.Request){io.WriteString(w,"foo")}handle("/bar",BarHandler{})handle()被传递给匹配http.HandlerFunc类型的函数或实现http.Handler接口(interface)的类型。 最佳答案

戈朗 :how do I handle index out of range error?

我正在用Go编写CLI接口(interface)程序。我的程序要求用户输入文件名作为参数。以下是我编写的处理代码用户不输入任何参数的情况。但它出现panic并给出错误“索引超出范围”。我该如何处理?packagemainimport("encoding/hex""fmt""io/ioutil""log""os")funcmain(){iflen(os.Args)==0{fmt.Println("usage:gohex")os.Exit(1)}else{filename:=os.Args[1]data,err:=ioutil.ReadFile(filename)iferr!=nil{lo

google-app-engine - Appengine with Go : Is there a http. Handle prehook 或类似的东西?

假设我有以下init函数路由请求。funcinit(){http.HandleFunc("/user",handler1)http.HandleFunc("/user/profile",handler2)http.HandleFunc("/user/post",handler3)........}所有这些都要求我有用户的个人资料。我知道我可以funchandler1(whttp.ResponseWriter,r*http.Request){getUserdata()//Actualhandlercode......}但是,有没有一种方法可以在不将函数调用放入每个处理程序的情况下获取数据

windows - 从 Windows 上的 Go *net.UDPConn 获取 syscall.Handle?

如何在Windows上获取*net.UDPConn的底层syscall.Handle?我希望此句柄通过syscall.SetsockoptInt设置IP_MULTICAST_TTL。在Linux上,我执行以下操作:funcsetTTL(conn*net.UDPConn,ttlint)error{f,err:=conn.File()iferr!=nil{returnerr}deferf.Close()fd:=int(f.Fd())returnsyscall.SetsockoptInt(fd,syscall.SOL_IP,syscall.IP_MULTICAST_TTL,ttl)}但是在W

Windows 上的 Git : "I don' t handle protocol 'git clone http' "

我正在尝试在Windows7机器(Windows8的HyperV中的虚拟机)上安装git和tortoisegit。我按照说明进行操作,但现在当我尝试克隆某些内容时出现错误“我不处理协议(protocol)‘gitclonehttp’”关于发生了什么的任何线索? 最佳答案 您可能在只需要url的地方输入命令gitclonehttp://repo/url,即http://repo/url 关于Windows上的Git:"Idon'thandleprotocol'gitclonehttp'",

c - 写入()调用失败 : No space left on device: ENOSPC handling

write()调用失败,errno=28(ENOSPC),设备上没有剩余空间。我正在尝试通过以下方式处理此错误。当磁盘已满时,我正在执行lseek()以将文件指针移动到文件的开头。我相信现在write()应该不会失败,因为现在文件将从顶部被覆盖(文件不会扩展)。但是write()调用仍然失败并出现相同的错误。请解释此行为。if(errno==ENOSPC){curPos=lseek(gi4LogFd,0,SEEK_SET);break;} 最佳答案 仅仅因为您写入了文件的开头并不意味着文件系统将写入磁盘上的同一空间或者文件开头的空间