Go vs Python和其他语言中Windows上命名管道的行为

Go vs Python和其他语言中Windows上命名管道的行为,go,winapi,named-pipes,Go,Winapi,Named Pipes,我正在尝试使用的API,它通过命名管道公开。 在Python中,调用API非常简单 导入win32file handle=win32file.CreateFile( r'\\.\pipe\sp\远程控制', win32file.GENERIC|u READ | win32file.GENERIC|u WRITE, 0, 没有一个 win32file.OPEN_存在, 0, 没有一个 ) win32file.WriteFile(句柄,str.encode(“DoPlaySound(2)”) AP

我正在尝试使用的API,它通过命名管道公开。 在Python中,调用API非常简单

导入win32file
handle=win32file.CreateFile(
r'\\.\pipe\sp\远程控制',
win32file.GENERIC|u READ | win32file.GENERIC|u WRITE,
0,
没有一个
win32file.OPEN_存在,
0,
没有一个
)
win32file.WriteFile(句柄,str.encode(“DoPlaySound(2)”)
API的细节与此问题无关。我想知道的是上述Python代码与Go中的以下代码之间的区别:

导入(
“布菲奥”
“日志”
“net/http”
“github.com/Microsoft/go-winio”
)
func main(){
连接,错误:=winio.DialPipe(`\\.\pipe\sp\u remote\u control`,nil)
如果错误!=零{
log.Fatal(错误)
}
作者:=bufio.NewWriter(康涅狄格州)
_,err=writer.WriteString(“DoPlaySound(2)”)
}
已建立与命名管道的连接,并成功写入了14个字节,但由于某种原因,Soundpad似乎没有收到消息。 我已经研究了编码的差异,但是Go用UTF-8编码所有字符串,与Python 3相同。 我还尝试过使用
writer.Write([]字节)([DoPlaySound(2)”)
,结果相同


对我来说,这两个例子看起来完全一样,所以我希望这里的人能指出一个不同点,也许能帮助我找出Go版本不起作用的原因。

bufio
表明编写器是缓冲的。有冲洗手术吗?哇,显然你是对的。在调用
WriteString()
后添加一个
writer.Flush()
可以解决问题,并且声垫接收消息。谢谢!