TSINGSEE青犀视频团队最近接到了很多关于平台定制的项目,在EasyDSS的定制项目中,我们在Linux系统中以服务运行程序,发现程序无法启动,并且报错:can’t evaluate field RootPath in type*struct{*service.Config: Path string; ReloadSignal string; PIDFile string}
查看service.Config代码如下:
var to = &struct {
*Config
Path string
}{
s.Config,
path,
}
err = s.template().Execute(f, to)
该行代码从模板中读取信息。模板信息如下:
const sysvScript = `#!/bin/sh
# For RedHat and cousins:
# chkconfig: - 99 01
# description: {{.Description}}
# processname: {{.RootPath}}
我们可以看到service.Config代码中是path,而模板信息中是RootPath,这里问题就很明显了,是RootPath和Path不对应导致的。
关于服务的代码,未修改过,因此还原到以前的版本,将 RootPath 全部还原为Path。随后重新启动服务,则启动成功。
我们查询了Path 修改为 RootPath 的原因,发现是因为 GoLand 的使用错误。当在其他文件中重构 Path 时,会搜索整个项目的字符串中包含的 Path,并不仅仅修改对应的结构体。因此在使用 Refactor 时,需要确认下自己修改的仅仅是自己的字符串,防止修改过多的现象出现。
EasyDSS视频平台的定制涉及到很多方面,当然即便是非定制版本,也足够大部分场景的使用了,比如景区智慧旅游体系、电梯云物联解决方案等,有兴趣的朋友可以联系我们更深入了解或者测试。