正在为映射的成员调用类型函数



我正在编写一个通信协议。它发送令牌,我需要使用这些令牌进行身份验证。我创建了一个类型;AuthToken";为我编码/解码令牌。

在包装中;utils";,我声明它和一些类似的函数(这就像一个伪代码(:

package utils
type AuthToken struct{
// vars
}
func (token *AuthToken) Decode(encoded string){
// Decodes the token and fills internal fields
}
func (token AuthToken) GetField() string{
return field
}

在我的主包中,我想创建一个AuthTokens的映射来存储它们,但我不能在映射的成员中使用Decode函数,而我可以使用GetField:

package main
type TokenList map[string]utils.AuthToken
func main(){
tokenList := make(TokenList)
// To init one member I do:
tokenList["1"] = utils.AuthToken{} // This works
tokenList["2"] = make(utils.AuthToken) // This doesn't
// Then I need to call the function above, so I tried:
tokenList["1"].Decode("encoded") // Returns cannot call pointer method

我试过搜索它,但要么我不知道在哪里搜索,要么没有关于如何搜索的信息。

tokenList["2"] = make(utils.AuthToken) // This doesn't

不能使用make关键字从结构中实例化对象。这就是为什么上述说法不起作用的原因。


tokenList["1"] = utils.AuthToken{}
tokenList["1"].Decode("encoded") // Returns cannot call pointer method

tokenList["1"]返回非指针对象。您需要将其存储到一个变量中,然后从那里访问指针,只有这样您才能调用.Decode()方法。

obj := tokenList["1"]
objPointer := &obj
objPointer.Decode("encoded")

相关内容

  • 没有找到相关文章

最新更新