英文:
Send JSON to a unix socket with golang
问题
我正在尝试编写一个使用Golang控制mpv
的程序,通过向运行在/tmp/mpvsocket
的Unix套接字发送命令来实现。
这是我目前尝试的代码:
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将其发送到套接字?
英文:
I'm trying to write a golang program to control mpv
via issuing commands to a unix socket running at /tmp/mpvsocket
.
This is what I've tried so far:
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)
}
}
This should cause mpv to quit but nothing happens.
This command can be issued via the command line to get the expected results:
echo '{ "command": ["quit"] }' | socat - /tmp/mpvsocket
It uses socat
to send the JSON to the socket. How can I send this to the socket using Golang?
答案1
得分: 1
感谢@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)
}
}
英文:
Thanks to @AndySchweig in the comments above, I needed a new line after my JSON.
The fixed line:
_, err = c.Write([]byte(`{"command":["quit"]}` + "\n"))
The full block of fixed code:
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)
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论