我有一个测试程序,我想从命令行运行该程序的多个副本,并且我需要知道该程序的第一个实例。在Dart中,我执行了某人向我建议的以下操作:
RawServerSocket.bind("127.0.0.1", 8087)
如果失败,那么我知道另一个程序已“锁定”端口。这对我来说很好地解决了这个问题。当程序终止或套接字显式关闭时,将释放锁定。
如何在Go中获得类似的结果?
您没有说您正在使用哪个平台。如果要跨平台,那么打开本地套接字的解决方案非常简单。这是您在Go中的操作方法。
package main
import (
"log"
"net"
"time"
)
func main() {
ln, err := net.Listen("tcp", "127.0.0.1:9876")
if err != nil {
log.Fatal("Failed to get lock: ", err)
}
defer ln.Close()
log.Print("Started")
time.Sleep(time.Second * 10)
log.Print("Ending")
}
不幸的是,不使用套接字的跨平台方法很难做到这一点,它将涉及两组代码,一组用于Unix之类的系统,另一组用于Windows。
请注意,病毒检查程序不喜欢在Windows上打开监听套接字的程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句