草庐IT

linux线程同步

全部标签

go - 同步原语原子包

Go中的同步包有Once原语。Do()方法实现了func(o*Once)Do(ffunc()){ifatomic.LoadUint32(&o.done)==1{return}//Slow-path.o.m.Lock()defero.m.Unlock()ifo.done==0{deferatomic.StoreUint32(&o.done,1)f()}}为什么我不能使用此方法的其他版本?func(o*Once)Do(ffunc()){ifo.done==1{return}//Slow-path.o.m.Lock()defero.m.Unlock()ifo.done==0{deferato

go - 正在将标准库日志重定向到 logrus 线程安全

我正在使用logrus我的Go项目中用于结构化日志记录的库。我的logrus配置如下://GlobalvariableforloggingvargLog=&Logger{moduleName:ModuleName,logrus:logrus.New()}typeLoggerstruct{moduleNamestringlogrus*logrus.Logger}funcSetupGlobalLogger(logPrefixstring,logModestring)error{iflogMode=="file"{logFilePath:=fmt.Sprintf("var/%s.log",v

go - 架构Linux : golang can't use go build

我前几天安装了archlinux,想配置golang,但是遇到了一些问题,我从pacman安装了go:pacman-Sgo然后我在我的.bashrc中导出了一些环境变量exportPATH=$PATH:/usr/lib/goexportGOPATH=$HOME/goexportGOBIN=$GOPATH/bin但是当我使用“gobuild”进行构建时,我收到了错误消息:main.go:11:2:nobuildableGosourcefilesin/usr/lib/go/src/gogoenv包括:GOBIN="/home/thomas/go/bin"GOEXE=""GOPATH="/h

networking - 如何使用golang在linux中获取网络速度

伙计们,我正在阅读/proc/net/dev以获取接收和传输的字节我能够计算in_traffic和out_traffic但无法找到Speeddelta_time是上次检查的unix时间和当前unix时间的差值in_traffic=(((new_inbytes-prev_inbytes)*8)/(delta_time))out_traffic=(((new_outbytes-prev_outbytes)*8)/(delta_time))ifspeed>0{in_utilization=in_traffic/(speed*10000)out_utilization=out_traffic/

multithreading - goroutine 或多线程在 golang 中不起作用

我试图在golang中实现多线程。我能够实现goroutines,但它没有按预期工作。下面是我准备的示例程序,functest(sstring,fo*os.File){vars1[105]intcount:=0forx:=1000;x输出-good0bye0bye0bye0bye0good1bye1bye1bye1bye1good2bye2bye2bye2bye2....等等。上面的程序会创建一个文件,并在文件中写入“Hello”和“bye”。我的问题是我正在尝试创建5个线程并希望使用不同的线程处理不同的值。如果你会看到上面的例子,它打印了4次“bye”。我希望使用5个线程输出如下所示

linux - 我怎样才能在运行时 golang 应用程序中获得根级访问/权限?

下面的命令将创建一个用户,但它会询问sudo密码。cmd:="sudo/usr/sbin/useradd"+"-m-d"+home_dir+"-s"+preferredShell+"-g"+usrLoginName+""+usrLoginNamecmdStatus,err:=exec.Command("bash","-c",cmd).Output()如何在没有sudo的情况下执行上述命令或如何为我的golang应用程序提供根级别权限?如何解决? 最佳答案 使用sudo运行您的golang应用程序。

linux - Golang,在Linux中加载Windows DLL

我们的vendor提供了可在Windows上运行的DLL。是否可以使用Go加载自定义xxx.dll文件并在Linux中使用其功能?像这样:https://github.com/golang/go/wiki/WindowsDLLs 最佳答案 简短的回答是“不”:当您“加载”动态链接库时,它不仅实际加载(如从文件中读取),而且链接到您的地址空间运行程序——通过操作系统提供的特殊方式(在基于Linux的系统上,至少在x86/amd64平台上是一个外部进程;在Windows上,它是一个内核设施,AFAIK)。换句话说,加载动态链接库涉及在您

linux - 从 go lang 程序启动终端窗口?

我想要一个功能,我将在其中创建一个在linux系统上运行的go程序。当该程序运行时,它将从服务器下载一个zip文件夹并将其解压缩到用户HOME目录。提取的文件夹将有一个shell脚本文件,例如。更新.sh。现在我想一旦该文件被提取我想打开终端并自动运行位于提取文件夹内的shell脚本。请指导我,我可以这样做吗? 最佳答案 你看过Go标准库了吗?你最好的选择是os/exec.我不知道打开另一个终端并在it中启动脚本的可行性如何,但是您可以将os/exec启动的命令的输出通过管道传输到终端的标准输出,其中go程序启动。从你的问题来看,下

multithreading - Golang线程不是每次都执行

这个问题在这里已经有了答案:Nooutputfromgoroutine(3个答案)Goroutinedoesnotexecuteiftime.Sleepincluded(1个回答)关闭4年前。所以,我正在测试Golang。我知道fmt.Println不是线程安全的。所以,我尝试了sync.Mutex。程序如下:functhreder(mux*Mutex,iint){mux.Lock()fmt.Println("Iamthread:",i)mux.Unlock()return}funcmain(){m:=&Mutex{}fori:=0;i我期待300行输出。但是,我得到80-90行。我哪

go - 使用 goroutine 的多线程

我正在尝试使用Go来自动化我的侦察工具。到目前为止,我可以在kali(Nikto/whois)中运行两个基本工具。现在我希望它们并行执行,而不是等待一个函数完成。阅读了一下之后,我开始知道这可以通过使用goroutines来实现。但我的代码似乎不起作用:packagemainimport("log""os/exec""os""fmt")varurlstringfuncnikto(){cmd:=exec.Command("nikto","-h",url)cmd.Stdout=os.Stdouterr:=cmd.Run()iferr!=nil{log.Fatal(err)}}funcwho