草庐IT

timer_handle

全部标签

ssh - Golang SSH 服务器 : How to handle file transfer with scp?

我在golang中使用crypto/ssh包编写了一个小型SSH服务器。它支持返回交互式shell并立即执行命令。这是服务器的一个最小示例:packagemainimport("fmt""io/ioutil""log""net""os/exec""golang.org/x/crypto/ssh")funcmain(){c:=&ssh.ServerConfig{PasswordCallback:func(cssh.ConnMetadata,pass[]byte)(*ssh.Permissions,error){ifc.User()=="foo"&&string(pass)=="bar"{

go - http.Handle 在 Golang 中不起作用

我尝试渲染一个模板:funcmain(){http.HandleFunc("/",index)http.HandleFunc("/login",login)err:=fcgi.Serve(nil,http.HandlerFunc(handler))}funchandler(whttp.ResponseWriter,r*http.Request){w.Header().Set("Content-type","text/html")t,_:=template.ParseFiles("404.html")t.Execute(w,&page{Title:"notwork"})}但是当我打开每个

go - 分段文件上传 : How to Handle FileHeaders

我需要读取一个多部分表单文件。我将自定义reqobj传递给处理程序函数而不是http.request对象,我使用的是GorillaMux。处理程序签名是这样的:funchandlerFunc(whttp.ResponseWriter,cR*custReqObj)我是这样访问它的:fileHeaders:=cR.MultipartForm.File["file"]fileHeader:=fileHeaders[0]fileName:=fileHeader.Filenamefile,err:=fileHeader.Open()因为我没有请求对象,所以我不能这样做:request.FormF

error-handling - Go 中如何处理异步错误?

我正在开发我的第一个真正的Go项目,一个消息传递API。我使用channel在使用线程不安全、基于事件的C协议(protocol)库的用户goroutine和库goroutine之间传递消息和其他数据。详情https://github.com/apache/qpid-proton/blob/master/proton-c/bindings/go/README.md我的问题分为两个相关部分:1。跨channelhandler错误的常用习惯用法有哪些?一端的goroutine爆炸了,我如何确保另一端解除阻塞,得到一个error值并且以后不会再次被阻塞?致读者:我可以关闭channel,但没

error-handling - Go 中如何指定和处理特定的错误?

我编写了这个通过RedditJSON的非常基本的解析器,我很好奇我如何专门管理Go中的错误。例如,我有一个链接的“获取”方法:funcGet(redditstring)([]Item,error){url:=fmt.Sprintf("http://reddit.com/r/%s.json",reddit)resp,err:=http.Get(url)iferr!=nil{returnnil,err}deferresp.Body.Close()ifresp.StatusCode!=http.StatusOK{returnnil,err}/**Othercodehere*/}我如何处理来自

Go Timer 在停止时死锁

我正在尝试通过停止和重置计时器来重用它们。我遵循文档提供的模式。这是一个可以在goplayground中运行的简单示例,它演示了我遇到的问题。是否有正确的方法来停止和重置不涉及死锁或竞争条件的计时器?我知道使用默认选择涉及channel消息传递时间的竞争条件,不能依赖。packagemainimport("fmt""time""sync")funcmain(){fmt.Println("Hello,playground")timer:=time.NewTimer(1*time.Second)wg:=&sync.WaitGroup{}wg.Add(1)gofunc(_wg*sync.Wa

error-handling - 返回结构时的错误处理

据我所知(来自here和阅读standerd库),在返回数据和错误的库中处理错误的惯用方式。问题是,当我确实运行时必须返回一个错误,我应该返回什么作为我的数据?空结构?0?举个例子//LoadtheconfigfuncLoadConfig(locationstring)(Config,error){//ReadthefileconfigFile,err:=ioutil.ReadFile(location)iferr!=nil{returnConfig{},err}//ConvertittoConfigstructvarconfigConfigjson.Unmarshal(configF

戈朗 : how to handle blocking tasks optimally?

众所周知,goroutine是同步但非阻塞的处理单元。golang调度程序处理非阻塞任务,例如来自字符设备的套接字、定时器、信号或其他事件非常好。但是block设备io或CPU敏感任务怎么样?它们在完成之前不能被打断,也不能被多路复用。运行goroutine的OS线程将卡住,直到goroutine返回或让步。在这种情况下,调度粒度会变差。当然,您可以在代码中将任务拆分为更小的子任务,例如,不要一次复制1GB的文件,而是先复制10MB,让出,再复制另外10MB等,这样同一操作系统线程中的其他goroutines有机会运行。CPU密集型任务的另一个示例:逐个压缩文件并最终合并它们。但这破坏

go - 如何停止当前正在另一个 go-routine 中收听的 time.Timer?

我有一个空闲超时计时器为select在goroutine中运行,如果我看到事件我想取消计时器。我看过thedocumentation我不确定我是否清楚它说的是什么。func(t*Timer)Stop()boolStoppreventstheTimerfromfiring.Itreturnstrueifthecallstopsthetimer,falseifthetimerhasalreadyexpiredorbeenstopped.Stopdoesnotclosethechannel,topreventareadfromthechannelsucceedingincorrectly.T

http - 服务器启动后如何更改 http.Handle() 中的处理程序?

我在Go中使用socketio"github.com/googollee/go-socket.io"。出于某种原因,我必须制作一个新的*socketio.server并将其注册到"/static/",它已经在旧的*socketio.server上注册了。这意味着我必须在服务器启动后替换http.Handle("/socket.io/",ioserver)中的处理程序ioserver。下面是我的部分代码,当有事情发生时,我会创建一个新的ioserver。我希望新的ioserver成为http.Handle("/socket.io/",ioserver)中的处理程序ioserver,_=s