包依赖关系和初始化

时间:2014-05-09 23:55:46

标签: go

我是Go的新手并试图找到解决以下问题的方法。

  1. 目标是将所有日志写入文件。
  2. 包主要导入包A。
  3. 在主程序包main中,在main方法中,日志记录设置为写入文件
  4. 包A具有init功能。在A的init函数中,有一个日志行--log.Fatal("我是包A")。
  5. 由于主程序包导入A,首先调用了初始化函数(甚至在我们有机会设置日志以写入文件之前)。
  6. 如何解决这个问题,以便日志"我是包A"被写入文件?

2 个答案:

答案 0 :(得分:3)

将日志记录初始化移至logmain导入的A程序包,并且不直接或间接依赖于您要记录到的应用程序部分初始化期间的文件。根据{{​​3}}和Effective Go中的初始化顺序的说明,这应该足以确保您的日志记录首先被初始化。

答案 1 :(得分:0)

如果程序包A的init函数依赖于其他事情,那么可以放置其他内容的地方位于A所依赖的程序包的init函数中。如果你希望能够对其他内容进行参数化,您需要将所有内容从init移出并移动到手动调用的函数(称为CustomInit或其他内容)中,您可以为其控制调用顺序,参数,等

基本上,您不能使用参数化的init函数。由于A的init函数记录到参数化的日志记录对象,因此它(间接)参数化,因此您不能使用内置的init函数。