场景说明:我的项目站点是PHP,现在需要用 GoLang 写一个定时任务,去修改一些数据库中的内容。
GoLang 执行时需要通过一个读取参数判断当前任务是否执行,这个参数保存在 PHP 内。
方法
PHP 增加一个接口返回需要的参数,这样做 GoLang 访问 127.0.0.1, 如果执行频率太高的情况,会给 Apache 带来太多压力。放弃。
GoLang 读取 PHP 文件,通过自负串截取,取得参数。这样做性能是最好的,但是 PHP 的配置文件,甲方总是修改,他不太懂,为了避免他改错,造成读取不到参数,而且方法感觉也不优雅。放弃。
GoLang 通过命令执行单独的 PHP 文件, PHP 返回参数给 GoLang,这样避免了经过 127.0.0.1 给 Apache 带来的压力。
上代码
PHP
<?php
$config = include_once("/Users/niejunyong/www/c.799coin.com/config/hello.php");
echo json_encode($config['trade']['time'][0]);
exit;
GoLang
type start struct {
Open string
Close string
}
// 获取市场开放时间
func tradeStart() {
cmd := exec.Command("php", "-f", "/Users/niejunyong/go/src/workspace/kuanliangou_setTime/close_order/config.php")
// 设置接收
var out bytes.Buffer
cmd.Stdout = &out
// 执行
err := cmd.Run()
if err != nil {
fmt.Println(err)
}
// 字符串转 JSON
var s start
err = json.Unmarshal([]byte(out.String()), &s)
if err != nil {
fmt.Println("json.marshal failed, err:", err)
}
fmt.Println()
fmt.Println(s)
fmt.Println(s.Open)
fmt.Println(s.Close)
}
运行结果