因此,结构包含可能会变异的数据。Golang中是否有一些技巧或技术可以告诉func它必须接受一个结构的新实例?换句话说,尽最大可能避免重用在事实之前已经被突变或在函数生命周期中可能被突变的数据。(我可以避免更改内容,但团队中的其他开发人员可能无法获取备忘录)。

为了显示:

type CMRequest struct {
  Endpoint    string
  Method      string
}

func (cmreq CMRequest) Run() (res *goreq.Response) {
 /// this could mutate cmreq
}

显然Run()可以使cmreq中的数据发生变异,所以我想知道是否存在一个好的模式来强​​制每次创建新数据?我唯一能想到的就是保持该结构的私有性,并执行以下操作:

type cmrequest struct {
  Endpoint    string
  Method      string
}

func (cmreq cmrequest) Run() (res *goreq.Response) {
 /// this could mutate cmreq
}

然后公开一个辅助函数:

func MakeRequestAndUnmarshalBody(d CMRequestNoReuse) (*goreq.Response) {

  // check that d has a unique memory location?

  cmreq := NewCPRequest(d)
  res := cmreq.Run()

  return res
}
d CMRequestNoReuse