go中dev和prod env的const值不同
例如,我正在开发留言簿。它允许添加需要版主批准的记录。但在开发进一步的功能时,批准在测试期间添加的每个记录是一件痛苦的事情。 那个么,是否有可能构建应用程序的开发版本,用适当的标志集创建这样的记录呢 例如,prod build使用以下功能编译:go中dev和prod env的const值不同,go,Go,例如,我正在开发留言簿。它允许添加需要版主批准的记录。但在开发进一步的功能时,批准在测试期间添加的每个记录是一件痛苦的事情。 那个么,是否有可能构建应用程序的开发版本,用适当的标志集创建这样的记录呢 例如,prod build使用以下功能编译: func NewRecord() Record { return Record{Moderation: Awaiting} } 在开发版本中,编译时使用: func NewRecord() Record { return Record{
func NewRecord() Record {
return Record{Moderation: Awaiting}
}
在开发版本中,编译时使用:
func NewRecord() Record {
return Record{Moderation: Approved}
}
我知道在前端,当您构建一些JS应用程序时,在构建用于生产的应用程序时设置NODE_ENV=production环境变量是一种常见的做法。
我正在围棋中寻找类似的东西。
我有两种看法,但我不喜欢其中任何一种:
waiting=Approved
,然后在构建prod版本时将其更改回实际值。但我担心有一天我会忘记这个模拟,将其提交回购或类似的东西func NewRecord() Record {
if os.Getenv(mykey) == "production" {
return Record{Moderation: Awaiting}
} else {
return Record{Moderation: Approved}
}
}
但我不喜欢在运行时为每个新记录计算这个条件。对于编译语言来说,这似乎是错误的谢谢。我个人认为,使用您在示例中使用的环境变量是实现这一点的“正确”方法。这允许您在不重建应用程序的情况下调整行为,这在调试时可能非常有用。然而,如果您真的希望在编译时完成这项工作,则可以使用 构建约束是放置在文件顶部的一条特殊注释,上面写着“仅在满足特定条件时构建此文件”。条件可以是我们正在构建的机器体系结构、我们正在运行的操作系统或用户在构建时指定的自定义构建标记 例如,您可以将函数调整为以下内容:
func NewRecord() Record {
return Record{Moderation: ModLevel}
}
然后定义ModLevel两次,一次在文件ModLevel\u prod.go
中,如下所示:
// +build !dev
package mypackage
const ModLevel = Awaiting
// +build dev
package mypackage
const ModLevel = Approved
以及modlevel\u dev.go
中的一个(或者,在本例中,文件名并不重要)如下所示:
// +build !dev
package mypackage
const ModLevel = Awaiting
// +build dev
package mypackage
const ModLevel = Approved
现在,在构建时,文件的生产版本是默认版本,如果要构建文件的开发版本,则必须显式包含build标记:
$ go build -tags dev
在以下位置对表达式求值一次:
谢谢关于“正确性”,我还没有过时的意见。也许你是对的。虽然这个答案解决了前面提到的问题,但我在这个问题上支持@mellow marmot:这些东西应该保持可配置性——也就是说,在启动时从一些配置文件和/或环境中提取,谢谢。一、 事实上,我将使用这种方法,但有标记的答案描述了如何在被问到问题时实现我想要的。