溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php和golang的配合方法

發布時間:2020-09-18 10:52:24 來源:億速云 閱讀:277 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關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:類庫中的原始調取demo

package main
import (
 "fmt"
 "github.com/yanyiwu/gojieba"
 "strings"
)
 
func main() {
 x := gojieba.NewJieba()
 defer x.Free()
 
 s := "小明碩士畢業于中國科學院計算所,后在日本京都大學深造"
 words := x.CutForSearch(s, true)
 fmt.Println(strings.Join(words, "/"))
}

保存文件為main.go,就可以運行

2:調整后代碼為:

package main
import (
 "bufio"
 "fmt"
 "github.com/yanyiwu/gojieba"
 "io"
 "os"
 "strings"
)
 
func main() {
 
 x := gojieba.NewJieba(
  "/data/tmp/jiebaDict/jieba.dict.utf8", 
  "/data/tmp/jiebaDict/hmm_model.utf8", 
  "/data/tmp/jiebaDict/user.dict.utf8"
 )
 defer x.Free()
 
 inputReader := bufio.NewReader(os.Stdin)
 for {
  s, err := inputReader.ReadString('\n')
  if err != nil && err == io.EOF {
   break
  }
  s = strings.TrimSpace(s)
 
  if s != "" {
   words := x.CutForSearch(s, true)
   fmt.Println(strings.Join(words, " "))
  } else {
   fmt.Println("get empty \n")
  }
 }
}

只需要簡單的幾行調整,即可實現:從標準輸入接收字符串,經過分詞再輸出

測試:

# go build test
# ./test
# //等待用戶輸入,輸入”這是一個測試“
# 這是 一個 測試 //程序

感謝各位的閱讀!關于php和golang的配合方法就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女