【发布时间】:2016-08-10 13:36:01
【问题描述】:
我正在用 golang 开发一个客户端/服务器应用程序,并且客户端和服务器上都存在某些逻辑实体(列表有限)
我想确保此实体的某些代码仅包含在服务器部分中,而不包含在客户端中(反之亦然很好,但不是那么重要)。
天真的想法是依赖死代码消除,但根据我的简短研究,这不是处理任务的可靠方法...go build 根本不会消除死代码,因为它可能是通过反射使用(没有人关心它不是,也没有选项可以调整它)
更可靠的方法似乎是将代码拆分到不同的包中并适当地导入,这似乎可靠但过度复杂的代码迫使您在不同的包之间物理拆分某些实体并始终牢记这一点...
最后还有构建标签允许在同一个包下为客户端和服务器有条件地构建多个文件
使用构建标签的动机是我希望在不引入任何合成实体的情况下保持代码尽可能干净
用例: 有一定的密码学例程,客户端使用公钥,服务器使用私钥操作......代码逻辑上属于同一个实体
你会选择什么选项,为什么?
【问题讨论】: