gpt4 book ai didi

go - 不确定如何覆盖回调以调整未导出的字段

转载 作者:数据小太阳 更新时间:2023-10-29 03:44:06 25 4
gpt4 key购买 nike

我想做的是覆盖给定对象的一些 bool 值,例如:

func main() {
manager := dshardmanager.New("Bot " + token)
manager.bareSession.State.TrackRoles = false;
manager.bareSession.State.TrackPresences = false;

// more stuff happens down here
}

但是 bareSession 是一个未导出的字段,因此我需要以不同于我正在收集的方式来执行此操作。我遇到过一些使用反射的方法,但我想学习执行此操作的最佳实践方法。

在我的具体情况下,它看起来像 library I'm using offers a method to accomplish this .我一直在研究如何覆盖/定义这样的方法,但似乎无法弄清楚如何去做。

定义 this SessionFunc() 的理想方法是什么?以我尝试的方式自定义 session ?

最佳答案

我不知道那个库的上下文,所以我不确定我在这里写的内容对你是否有意义 :) 但是通过查看 API,SessionFunc 是一个func(token string) (*discordgo.Session, error),即接收string并返回Session错误。所以你可以做这样的事情来覆盖它:

func main() {
manager := dshardmanager.New("Bot " + token)
manager.SessionFunc = func(token string) (*discordgo.Session, error) {
// use "token"

// if invalid:
if token == "" {
// return an error
return nil, fmt.Errorf("invalid token")
}

// otherwise, return a valid session
return &discordgo.Session{}
}

// more stuff happens down here
}

代码显然非常通用,但主要思想是您需要使用确切的 header 定义该函数并实现它。例如,我不知道您如何评估 token 参数或创建 discordgo.Session。或者如何使用 SessionFunc 配置 TrackRolesTrackPresences 值。这仅针对该库非常具体,但我想这对你来说比对我更有意义 :)

您还可以在其他地方使用该确切的 header 定义一个常规函数:

func createNewSession(token string) (*discordgo.Session, error) {
// use "token"

// if invalid:
if token == "" {
// return an error
return nil, fmt.Errorf("invalid token")
}

// otherwise, return a valid session
return &discordgo.Session{}
}

并设置为:

func main() {
manager := dshardmanager.New("Bot " + token)
manager.SessionFunc = createNewSession

// more stuff happens down here
}

这两种方法的工作方式相同。

反射 [几乎] 从来不是做这些事情的推荐方式,如果库创建者将这些属性设为私有(private),则不应从外部更改/访问它们。

关于go - 不确定如何覆盖回调以调整未导出的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57290894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com