我有一个结构如下的 go Calltree:// state is a common struct shared among all "instances" of MyType - simulating member variables for an Interface(s MyType) Run(state *State){ // called from outside // define goroutines that fetch something via http HTTPCallback(){ // runs on every http response parseData(record, outputChan) }}(s MyType) parseData(rec []string, outputChan chan(interface{})){ // doesn't need anything from "state" so far doIdMapping(string) }doIdMapping(key) { return state.Map[key] }有没有一种方法可以访问 Map(它是完全不变的),而不必被迫通过 HTTPCallback 传递“状态”,并且上面的所有 goroutine 最终都会调用 HTTPCallback?这不仅对清晰的代码不利,而且对测试也不利。所有中间函数都带有它们甚至不需要依赖的结构指针。我错过了关于 go 语言设计的一些东西吗?:/
1 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
如果所有这些都在一个包中,您可以简单地State在包级别声明并在任何地方使用它。例如;
package myHttpClient
import (
"allthatstuff"
)
state State // not exported but available everywhere in 'myHttpClient'
ExternState State // exported so anyone importing myHttpClient can do myHttpClient.ExternState
- 1 回答
- 0 关注
- 171 浏览
添加回答
举报
0/150
提交
取消