You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确接收DBus消息?Go语言示例无法接收信号求助

问题1:DBus信号无法被监听到的修复方案

你的代码中,监听器的匹配规则缺少对象路径的过滤条件,导致发送的信号无法被正确匹配;同时发送信号时的signalName写法存在冗余,以下是具体修改:

监听器(runListener)修改AddMatchSignal逻辑

添加对象路径匹配规则,确保只接收指定路径下的目标信号:

err = conn.AddMatchSignal(
    dbus.WithMatchInterface("org.example.ListenerInterface"),
    dbus.WithMatchMember("Message"),
    dbus.WithMatchObjectPath("/org/example/Listener"), // 新增对象路径匹配
)

发送者(runSender)修改signalName定义

Emit方法的第二个参数只需传入信号成员名,无需拼接接口名:

// 直接使用成员名,接口关联由匹配规则处理
signalName := "Message"

修改后重新运行,监听器就能正常接收到Hello from the sender!的消息。


问题2:GoLand中运行两个独立项目的报错解决

报错package dbus_messenger is not in std (/usr/lib/golang/src/dbus_messenger)是因为项目未正确初始化Go模块,或GoLand模块配置错误,按以下步骤修复:

  1. 为每个项目初始化Go模块
    打开终端进入每个项目的根目录,分别执行:

    # 监听器项目,模块名可自定义
    go mod init dbus_listener
    go mod tidy
    
    # 发送者项目,模块名可自定义
    go mod init dbus_sender
    go mod tidy
    

    go mod tidy会自动拉取github.com/godbus/dbus/v5依赖。

  2. 配置GoLand模块

    • 打开File > Project Structure > Modules
    • 点击+选择New Module,分别为两个项目创建Go模块,指定各自的根目录和模块名
    • 确保每个模块的Go SDK指向正确的本地Go安装路径
  3. 创建独立运行配置
    为每个项目的main.go创建单独的Run Configuration,运行时分别启动两个配置即可。

内容的提问来源于stack exchange,提问作者the_endian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:03:12