go - 在包中定义共享变量 - go

标签 go

我有一个包含多个 go 文件的包,我正在寻找使用这些变量时要遵循的最佳实践

var print string

type someStruct struct {
  //some vars
}

考虑包文件中包含以下 go 文件

file1.go 有一个字符串变量print

file2.go 有一个结构体 someStruct

file3.go 需要一个字符串变量打印

file4.go 需要一个结构体 someStruct

我应该在 file3.go 中访问/使用 file1.go 中的变量还是创建一个新的字符串变量,即 file3print

我应该以同样的方式访问/使用 file4.go 中的 file2.go 中的 someStruct 或者创建一个新结构,即 file3SomeStruct

最佳答案

不要创建特定于文件的类型,也不要创建变量,a la file3SomeStruct,只是为了避免在文件之间共享这些标识符,这样的做法在我看来是非常不合理的,而且大多数绝对被认为是不好的做法。

在文件之间共享标识符是绝对可以的,您可以在标准库中找到无数这种做法的示例。

只需浏览一下 net/http package source files .

如果需要,您可以将包视为代表单一概念,例如HTTP,以及表示其子概念的包文件,如 HTTP 服务器、HTTP 客户端或 HTTP 请求。但是要使 HTTP 有用,它的子概念需要能够交互。 (这不是必需的标准,某些包装采用不同的设计可能会更好。)

关于go - 在包中定义共享变量 - go,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47339471/

相关文章:

json - 无法在 gqlgen 中生成标量 JSON

go - 将类型变量传递给函数

go - 如何解析 PEM 证书的集合

ajax - 使用 ajax 的网络抓取工具/爬虫

unit-testing - 如何对 Go 错误进行单元测试

go - 制作自定义结构类型的常量全局变量

mongodb - 通过 mgo v2(golang、mongoDB)更新结构的数组元素

go - 在 docker cpu usage 计算中什么是 : TotalUsage, SystemUsage,PercpuUsage 以及计算的含义是什么?

android - 如何使用gomobile build sdk-arr-libs访问web?

Goroutines 不能并行工作