我写了一些创造“人类”的代码。人类每 100 毫秒过一次生日,您可以像这样订阅事件:


    pers1 := new(Human)

    pers1.Init("John")


    pers1.Subscribe(func(h Human) { fmt.Printf("Observer1 : %s", h.String()); return })

    pers1.Subscribe(func(h Human) { fmt.Printf("Observer2 : %s", h.String()); return })


    time.Sleep(3 * time.Second)

输出如下


HUMAN John is born  // by init

HUMAN John is now followed by 0x4901a0   // by subscribe

There is now 1 observers

HUMAN John is now followed by 0x490300   // by subscribe

There is now 2 observers


[T+0100ms]


HUMAN John has its birthday      // after 100ms : birthday happens

Observer1 : HUMAN : John is 1   // callback

Observer2 : HUMAN : John is 1   // callback

// ... continue for 3 seconds

详细代码在这里,但问题不在 https://goplay.tools/snippet/7qsZ1itcqrS


我的问题如下:


我想创建一个接口Producer对应于产生我可以订阅的事件的事物。


您可以订阅:


过生日的人

可检测湿度变化的湿度传感器

收到邮件的邮件服务器...

在我的例子中,回调函数有一个参数:一个Human。那个年龄变了...


以相同的方式,湿度传感器的给定事件将期望传感器结构。


我的问题是


我认为这样做有意义吗?(这是一个学者问题,没有工作)

如果是,如何。我找不到相关的例子

那将是


type Producer interface{ 

     Subscribe( func( < something variable >) )

}

我无法得到一些工作。我也很难为这个问题找到一个好的标题。随意给我一个更好的。