如何处理在 Go 源文件中的 funcs 之外声明的值的错误

How to handle errors for values declared outside of funcs in Go source file

我有这个:

var wd, _ = os.Getwd()
var advanceAgreementTemplateBytes, _ = ioutil.ReadFile(path.Join(wd, "/docs/templates/advance-agreement.template"))
var advanceAgreementTemplate = string(advanceAgreementTemplateBytes)
var t, _ = template.New("advance-agreement").Parse(string(advanceAgreementTemplate))

func sendAdvanceEmail(user *common.User, amount *apd.Decimal, fee *apd.Decimal, created time.Time) { 

   // use variables `t`, `advanceAgreementTemplate`  etc here
 }

我希望能够处理缓存变量中的错误,而不是使用 _ 而不是 err。唯一的方法是使用 func init()?

如果您想对这些进行错误检查,请使用 func init 或仅在 main 中初始化它们。

并非所有调用都具有 Must 变体,并且此类变体并非对所有调用都有意义。不要忘记 Go 的方式 是进行适当的错误检查。为所有可能的失败调用设置 Must 包装器会助长不良的编程风格,在这种风格下,不是处理和传播错误,而是默认情况下每个错误都会崩溃。

如果您只需要在出错时使程序崩溃,那么编写您自己的 Must 包装器非常容易。

编写您自己的 Must 包装器的好处是您可以提供更好的错误消息 - Go 鼓励的另一件事。 ioutil.ReadFile 只会说 "open /docs/templates/advance-agreement.template: No such file or directory".