go - 我应该如何编写这个函数来返回一个指针?
问题描述
假设我们有以下结构:
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 of
,invalid 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)
}
但老实说,我不知道自己在做什么,也不知道这是否是正确的做法。
解决方案
假设您只想在由函数参数索引的 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
,但该结构中没有任何公共字段......)
推荐阅读
- r - 如何读取其中包含不同表的 txt 文件
- python - TCL error no more menus can be assigned in autodock tools
- javascript - Vue 可拖动,只能在容器内拖动
- python-3.x - Python多处理具有不同参数的相同函数
- dependency-injection - 在 Autofac 中使用 RegistrationSource 自动注册
- node.js - 使用 axios 拦截器进行补丁请求
- css - -webkit-fill-available 的用途是什么?
- javascript - 打字稿错误 TS2554:预期 0 个参数,但得到 1 个。同时使用 useReducer 和 useContext 和 React
- python - 获取诗歌脚本端点
- ui-automation - 我们如何在空手道中按向下箭头键,然后按 Enter 键