我正在使用golang编写Web应用程序.我是这门语言的新手.我试图找到在golang webapp中记录requestid的最佳方法.我决定使用go的日志库(https://golang.org/pkg/log/)或logrus(https://github.com/sirupsen/logrus).在我看来,这两者都没有提供与requestId日志记录相关的任何内容.因此,为了生成requestId并在api的流程中使用它,我现在已经达到了以下方法
使用此处列出的任何一个uid生成库(https://golanglibs.com/search?q=id+generator&sort=top)生成requestid.并在开始使用http.Handler包装器处理请求时在上下文(https://golang.org/pkg/context/)中设置它.并在我想要记录的所有地方使用此上下文.
但要实现这一点,我需要将上下文对象传递给我需要记录某些东西的所有函数.这对我来说听起来不太好,因为我正在触及所有函数的原型(即添加上下文参数).有没有更好的方法来做到这一点?像ThreadLocal对象之类的东西.它可以从线程中的任何地方访问,并使用它我们可以在任何需要的地方获取请求ID?
我正在寻找有关何时preConditions在 Liquibase 中使用的最佳实践changeSet。我理解这样一个事实,即它有助于检查数据库的现有状态,然后应用更改。如果我要从一开始就使用 Liquibase 并且所有更改都将通过 Liquibase 完成,这changeSet不足以检查/验证现有状态吗?写作preConditions在这种情况下,在我看来更加多余。我一直无法找到任何关于此的好文件。
在我的用例中,我将使用 Liquibase 进行数据库架构更改 + 在几个表中添加元数据。我看到了一些 db 模式更改查询的示例,例如添加表、列等preConditions已被使用的地方。但是在正常的插入、更新、删除查询方面并没有看到太多。preConditions为此类数据操作查询编写代码也是一种好习惯吗?有没有关于这方面的好文档?