介绍
这篇文章给大家分享的是有关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的配合方法就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!