从PHP运行Go脚本

时间:2016-12-29 18:19:45

标签: php go

我有一个托管PHP文件来获取请求,从中获取一个字符串并且必须提供Go(GoLang)脚本。我怎么能这样做?

包主 我的GO脚本:

package main

import (
"log"
"fmt"
"io/ioutil"
"strings"
ivona "github.com/jpadilla/ivona-go"
)

func main() {
    client := ivona.New("GDNAICTDMLSLU5426OAA", "2qUFTF8ZF9wqy7xoGBY+YXLEu+M2Qqalf/pSrd9m")
    text, err := ioutil.ReadFile("/Users/Igralino/Desktop/text.txt")
    if err != nil {
        log.Fatal(err)
    }

    arrayOfParagraphs := strings.Split(string(text), "\n\n")
    i := 0
    for _,paragraph := range arrayOfParagraphs {
        paragraph = strings.TrimSpace(paragraph)
        if (len(paragraph) < 1) { // against empty lines
            continue
        }
        log.Printf("%v\n", paragraph)
        options := ivona.NewSpeechOptions(paragraph)
        options.Voice.Language = "ru-RU"
        options.Voice.Name = "Maxim"
        options.Voice.Gender = "Male"
        options.OutputFormat.Codec = "MP3"
        r, err := client.CreateSpeech(options)
        if err != nil {
            log.Fatal(err)
        }

        i++
        file := fmt.Sprintf("/Users/Igralino/Desktop/tts%04d.MP3", i) // files like 0001.ogg
        ioutil.WriteFile(file, r.Audio, 0644)
    }
}

1 个答案:

答案 0 :(得分:0)

Go不是脚本语言!这是一个编译的。

编译语言

  

编译语言是一种编程语言,其实现通常是编译器(从源代码生成机器代码的转换器),而不是解释器(源代码的逐步执行器,其中不发生运行前转换)。

因此使用“脚本”术语是非常错误的!

如何与其他程序的Go程序进行通信。

您必须先构建并安装程序。如果您已准备好并配置了Go环境,这很容易:

$go install github.com/user/hello

您可以从命令行调用它,因为它已安装到操作系统。

$hello

如果你的程序应该期望参数使用flag包来声明它。

$hello -name <value>

显然,您可以使用system函数或任何可能的函数从PHP调用它(我对PHP一无所知)。

其他方法是将Go程序设计为守护程序,并通过端口直接与其进行通信。你的Go程序必须连续运行并监听端口。关于Go程序的守护程序的良好answer