Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

昨天关闭。



Improve this question




我正在使用“https://github.com/slack-go”模块开发Go软件包。大致来说,我的功能结构如下:
entry:
 function:
  function:
    very large loop:
      function:
        posting to Slack somewhere in here
我应该在底部使用“slack_client:= slack.New(..”)构建一千个客户端,还是在入口处一次执行一次;如果是后者,将其传递到底部的首选方法是什么?

最佳答案

使用Singleton模式。
这是使用单例模式的地方,它在程序启动时实例化您的包/模块,并在程序中的任何地方使用实例。
对于您的Slack客户端,只需在自定义程序包中启动一次即可。如何传递实例?有两种方法:

  • 使用对象。创建一个容纳客户端的结构,并根据需要创建方法。沿程序传递该对象。
  • package slack
    
    type Object struct {
        client *slack.client_struct_type_from_https://github.com/slack-go
    }
    
    type New() *Object {
        return &Object{
            client: slack.New(), // call new function from the package
        }
    }
    
    func (o *Object) Post() error {
        // post logic here utilizing the client inside object.
    }
    
  • 在自定义包中使用全局对象/变量。只需创建一个全局变量/对象并创建init()函数即可初始化将包含您的客户端的该对象/变量。不要忘记使用此客户端创建函数(不同于第一种方法,不是方法)。使用所需的函数调用此程序包。
  • package slack
    
    client *slack.client_struct_type_from_https://github.com/slack-go
    
    // dont forget to call this new function before logging to slack, calling it without Init first might cause nil pointer error as the client not initiated yet
    type Init() {
        client = slack.New(), // call new function from the package
    }
    
    func Post() error {
        // post logic here utilizing the client global variable.
    }
    
    对于日志机制,我使用第二种方法,因为我不想为日志传递任何对象,因为它仅包含客户端。我只需要调用包和所需的关联函数。这样的代码更干净(至少对我而言)。

    关于go - 我应该在哪里构建Slack客户实例? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64093827/

    10-16 13:46