我正在尝试编写一个 golang 程序来通过向运行在 /tmp/mpvsocket
的 unix 套接字发出命令来控制 mpv
。
这是我到目前为止尝试过的:
func main() {
c, err := net.Dial("unix", "/tmp/mpvsocket")
if err != nil {
panic(err)
}
defer c.Close()
_, err = c.Write([]byte(`{"command":["quit"]}`))
if err != nil {
log.Fatal("write error:", err)
}
}
这应该会导致 mpv 退出但没有任何反应。
可以通过命令行发出此命令以获得预期的结果:
echo '{ "command": ["quit"] }' | socat - /tmp/mpvsocket
它使用 socat
将 JSON 发送到套接字。我如何使用 Golang 将其发送到套接字?
最佳答案
感谢上面评论中的@AndySchweig,我需要在 JSON 之后换行。
固话:
_, err = c.Write([]byte(`{"command":["quit"]}` + "\n"))
完整的固定代码块:
func main() {
c, err := net.Dial("unix", "/tmp/mpvsocket")
if err != nil {
panic(err)
}
defer c.Close()
_, err = c.Write([]byte(`{"command":["quit"]}` + "\n"))
if err != nil {
log.Fatal("write error:", err)
}
}
关于sockets - 使用 golang 将 JSON 发送到 unix 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41782004/