Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
昨天关闭。
Improve this question
我正在使用“https://github.com/slack-go”模块开发Go软件包。大致来说,我的功能结构如下: 使用对象。创建一个容纳客户端的结构,并根据需要创建方法。沿程序传递该对象。 在自定义包中使用全局对象/变量。只需创建一个全局变量/对象并创建init()函数即可初始化将包含您的客户端的该对象/变量。不要忘记使用此客户端创建函数(不同于第一种方法,不是方法)。使用所需的函数调用此程序包。
想改善这个问题吗?更新问题,以便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.
}
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