php和golang的配合方法

  介绍

这篇文章给大家分享的是有关php和golang的配合方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

<强>常规的方案,

1,用golang写一个http/TCP服务,php通过http/TCP与golang通信

2,将golang经过较多封装,做为php扩展。

3, php通过系统命令,调取golang的可执行文件

<强>存在的问题

1, http请求,网络I/O将会消耗大量时间

2,需要封装大量代码

3, php每调取一次golang程序,就需要一次初始化,时间消耗很多

<>强优化目标

1, golang程序只初始化一次(因为初始化很耗时)

2,所有请求不需要走网络

3,尽量不大量修改代码

<强>解决方案

1,简单的golang封装,将第三方类库编译生成为一个可执行文件

2, php与golang通过双向管道通信

<强>使用双向管道通信优势

1:只需要对原有golang类库进行很少的封装

2:性能最佳(IPC通信是进程间通信的最佳途径)

3:不需要走网络请求,节约大量时间

4:程序只需初始化一次,并一直保持在内存中

<强>具体实现步骤

1:类库中的原始调取演示

包主要   导入(   “fmt"   “;github.com/yanyiwu/gojieba"   “strings"   )      函数main () {   x:=gojieba.NewJieba ()   推迟x.Free ()      s:=靶∶魉妒勘弦涤谥泄蒲г杭扑闼?后在日本京都大学深造“   字:=x。CutForSearch(年代,真的)   fmt.Println(字符串。加入(话说,“/?)   }

保存文件为主要。去,就可以运行

<强> 2:调整后代码为:

包主要   导入(   “bufio"   “fmt"   “;github.com/yanyiwu/gojieba"   “无力偿贷;   “os"   “strings"   )      函数main () {      x:=gojieba.NewJieba (   “/数据/tmp/jiebaDict/jieba.dict.utf8"   “/数据/tmp/jiebaDict/hmm_model.utf8"   “/数据/tmp/jiebaDict/user.dict.utf8"   )   推迟x.Free ()      inputReader:=bufio.NewReader (os.Stdin)   为{   年代,犯错:=inputReader.ReadString (& # 39; \ n # 39;)   如果犯错!=nil,,做错了==OF {   打破   }   s=strings.TrimSpace (s)      如果s !=?“{   字:=x。CutForSearch(年代,真的)   fmt.Println(字符串。加入(话说,“;“))   其他}{   fmt.Println(“空\ n")   }   }   }

只需要简单的几行调整,即可实现:从标准输入接收字符串,经过分词再输出

<强>测试:

#去构建测试   #/测试。   #//等待用户输入,输入”这是一个测试”   #这是一个测试//程序

感谢各位的阅读!关于php和golang的配合方法就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

php和golang的配合方法