首页 > 解决方案 > 我应该如何编写这个函数来返回一个指针?

问题描述

假设我们有以下结构:

type BuyerData struct {
    id int
    balance float64
}
type AgentData struct {
    id int
    buyerData BuyerData
}
type GlobalData struct {
   agents map[int]AgentData
}

如果我想定义一个“插入等效于 Java 的类方法”GlobalData来返回一个指向它buyerData在给定 id 上的值的指针,这将是一个具有以下签名的方法:

func (globalData *GlobalData) getBuyerData(id int) *BuyerData

里面会写什么?我遇到了麻烦,因为它给出了各种各样的错误,比如cannot take the address ofinvalid indirect of或者does not support indexing......


这是我目前拥有的不会生成任何编译器异常的内容:

func (globalData *GlobalData) getBuyerData(id int) *BuyerData {
    var agents *map[int]AgentData = &(globalData.agents)
    var agentData AgentData = (*agents)[id]
    return &(agentData.buyerData)
}

但老实说,我不知道自己在做什么,也不知道这是否是正确的做法。

标签: gopointers

解决方案


假设您只想在由函数参数索引的 AgentData 结构中返回指向映射中值的指针,您可能的意思是说:

func (agentsGlobalData *AgentData) getBuyerData(id int) (*BuyerData, bool) {
    buyer, has := agentsGlobalData.agents[id]
    return &buyer, has
}

您也可以考虑将指针存储AgentData在该映射中,从而使您的结构:

type GlobalData struct {
   agents map[int]*AgentData
}

但是您可能还没有告诉我们足够多的关于您的用例来推荐其中一个。

(你说调用者应该能够“写入”到 a BuyerData,但该结构中没有任何公共字段......)


推荐阅读